sql - Postgresql 索引小写(列)没有按预期工作?

标签 sql postgresql

以下是我在搜索“amadeus”子字符串时可以获得的数据示例:

db=# SELECT entidade FROM gma WHERE entidade ILIKE '%amadeus%';
            entidade
---------------------------------
 Hairdresser Amadeus
 Snack-Bar Amadeus
 Restaurant Amadeus
 Restaurant Amadeus
 Restaurant Amadeus
 Amadeus - Musical Instruments
(6 rows)

但是我希望能够用 LIKE 替换 ILIKE。所以我试着用小写字母索引entidade:

db=# CREATE INDEX idx_gma_entidade ON gma USING btree
db-#   ( lower(entidade) );
CREATE INDEX

现在我期望使用 LIKE 访问完全相同的数据:

db=# SELECT entidade FROM gma WHERE entidade LIKE '%amadeus%';
 entidade
----------
(0 rows)

但是,如您所见,结果并不是我所期望的... 有人可以解释为什么吗?而且,如果可能的话,我怎样才能实现预期的行为?

最佳答案

运行选择时需要在列上使用 lower() 函数:

SELECT entidade FROM gma WHERE lower(entidade) LIKE '%amadeus%';

但是因为你在前面有一个通配符,查询无论如何都不会使用索引。所以创建一个没有意义

关于sql - Postgresql 索引小写(列)没有按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992242/

相关文章:

sql - MYSQL一对多JOIN

python - 如何为 geoalchemy2 类型使用 SQLAlchemy @compiles 装饰器

c# - 事务无法通过 Task.WhenAll 处理并行命令

ruby-on-rails - 在 Rails 中加载夹具数据库

mysql - 了解用于查找每个类别嵌套集模型的项目计数的 SQL 查询

sql - 如何在 Visual Studio 中使用 SSDT 重命名表

php - 统计数据库中的记录总数但只返回X条记录

C# 无限行读取

sql - 使用 PostgreSQL 选择 json 中的特定条目

c# - 使用 dockerized postgresql 图像的 Entity Framework Core 迁移。没有这样的主机是已知的异常