我正在使用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发布于 2017-12-01 10:20:09
大多数情况下,这种影响是由损坏的索引造成的。YUou可以通过禁用索引查询来检查是否是这样的:
set enable_bitmapscan = off;
set enable_indexscan to off;如果您看到了“禁用索引”的效果,只需运行
reindex table_name;还需要花一些时间来确定索引是如何损坏的。
谢谢Lukasz对enable_bitmapscan的评论
https://stackoverflow.com/questions/47589830
复制相似问题