有一个带有复合索引(COL1、COL2、COL3)的表.这个表中有很多数据. 我想构建查询,例如WHERE COL1=2,COL2=12,COL3 IN(1,2,3,...,40) 有没有办法完全使用索引(有3列)?
当我try 的时候
SELECT *
FROM table t
WHERE t.col1 = 2
AND t.col2 = 12
AND t.col3 IN (1, 2, 3, ..., 40)
Postgres计划器对(col1,col2)进行索引扫描,然后使用SeqScan逐个筛选400k的col3 IN (1, 2, 3, ..., 40)
行
如果我试一试
SELECT *
FROM table t
WHERE (col1, col2, col3) IN VALUES (2, 12, 1), (2, 12, 2), (2, 12, 3), ... ,(2, 12, 40)
它会给出错误:
临时文件大小超过TEMP_FILE_LIMIT
因此,它的效果很慢.有没有办法让Postgres对3列使用某种复合索引?