小编ssk*_*tes的帖子

为什么多个WHERE子句SQL SELECT语句在每个子句中有两个条件,其中一个条件具有相同的值需要很长时间?

我在Postgres 9.1数据库上运行了两个不同的SQL查询:

SELECT device_id, country FROM devices WHERE
(device_id = '97c179bd' AND country = 'US') OR
(device_id = 'bf5f50c6' AND country = 'US') OR
....
(device_id = '0e66c04d' AND country = 'US')
Run Code Online (Sandbox Code Playgroud)

运行12秒(由OR分隔的3620个子句)

SELECT device_id, country FROM devices WHERE
(device_id = '97c179bd' AND country = 'US') OR
(device_id = 'bf5f50c6' AND country = 'US') OR
....
(device_id = '0e66c04d' AND country = 'US') OR
(device_id = '0e66c04d' AND country = 'different')
Run Code Online (Sandbox Code Playgroud)

运行0.6秒(由OR分隔的3620个子句)

在第一个中,国家条件在每个条款中都是相同的.在第二个中,我在最后一个条款中将国家改为"不同".

第一个select语句需要12秒才能运行,第二个select语句需要0.6秒才能运行.

在第一个查询中,CPU几乎在所有12秒内没有任何磁盘读取的情况下固定在100%,表明它可能是花费这么长时间的解析器.第二个查询不会发生这种情况.

我运行了EXPLAIN ANALYZE并获得了两个查询分解的完全相同的结果.

这里发生了什么?为什么在每个WHERE子句语句中第二个条件相同会导致查询时间长得多?

编辑: …

postgresql select

3
推荐指数
1
解决办法
8031
查看次数

标签 统计

postgresql ×1

select ×1