我正在使用Postgres 9.2.24
今天我发现了一些令人困惑的事情。
我有一个带有文本列的表,并且表中有两条记录具有保存列值。
这两个值具有相同的md5值。
但是当我使用=
运算符时,我只能得到一个值。但如果我和%
一样使用,我可以得到两个值。
有谁知道为什么?
erp_number
列数据类型为文本
使用就像我们可以得到两个记录
select md5(erp_number)
from _order
where owner_id = 36700
and erp_number like '%北京20171130DFCX'
返回:
a0630e878a08c692b0d3ddc7cf3907b4
a0630e878a08c692b0d3ddc7cf3907b4
与
like '%北京20171130DFCX' or like '北京20171130DFCX%' or like '%北京20171130DFCX'
我也可以获得相同的行。似乎%
的位置无关紧要。
但如果我使用=
,我可以获得一条记录
select erp_number
from _order
where owner_id = 36700
and erp_number = '北京20171130DFCX'
返回
a0630e878a08c692b0d3ddc7cf3907b4
答案 0 :(得分:0)
大多数情况下,此类影响是由损坏的索引引起的。你可以通过查询禁用索引来检查是否是这样:
set enable_bitmapscan = off;
set enable_indexscan to off;
如果您发现效果因“索引已禁用”而消失 跑吧
reindex table_name;
还花一些时间来确定索引是如何被破坏的。
谢谢,Lukasz对enable_bitmapscan