Sql 同一表中两列范围内的索引比较

Sql 同一表中两列范围内的索引比较,sql,indexing,Sql,Indexing,在postgres或Mysql中是否可以创建一个索引来帮助在同一个表中的两列之间进行范围比较 例如,我有一个名为Test的表,有3列:id、col1和col2,它有2000万行。查询如下所示: SELECT id,col1,col2 from Test where col1 < col2; 我已经创建了它,但是查询计划器仍然进行顺序扫描 有没有办法增强该查询以减少执行时间 是的。用数学,路易斯 重新表述查询,使所有列都显示在过滤器的一侧(我基本上做了等效的转换-col2): 该索引只能在

在postgres或Mysql中是否可以创建一个索引来帮助在同一个表中的两列之间进行范围比较

例如,我有一个名为
Test
的表,有3列:
id
col1
col2
,它有2000万行。查询如下所示:

SELECT id,col1,col2 from Test where col1 < col2;
我已经创建了它,但是查询计划器仍然进行顺序扫描

有没有办法增强该查询以减少执行时间

是的。用数学,路易斯

重新表述查询,使所有列都显示在过滤器的一侧(我基本上做了等效的转换
-col2
):

该索引只能在PostgreSQL中使用,但不能在MySQL中使用。根据您的总体系统负载,另一种索引策略可能更好。此索引仅用于查询
col1
col2

参考资料:


不要像您所做的那样创建复合索引,试着分别在col1和col2上创建索引,看看planner做了什么?问题是我不能修改查询,我只需要知道是否有方法应用索引,或者如果没有,就解释为什么没有。
CREATE INDEX idx_test on Test(col1,col2);
SELECT id,col1,col2 from Test where col1 - col2 < 0;
CREATE INDEX idx_test on Test (col1-col2);