我试图找出一种优化以下SQL查询的方法:
select * from SOME_TABLE
where (col1 = 123 and col2 = 'abc')
or (col1 = 234 and col2 = 'cdf')
or (col1 = 755 and col2 = 'cvd') ---> I have around 2000 'OR' statements in a single query.
目前这个查询需要很长时间才能执行,所以无论如何都要让这个查询运行得更快吗?
答案 0 :(得分:3)
CREATE TABLE lookup (col1 INT, col2 VARCHAR(3), PRIMARY KEY(col1, col2), KEY(col2)) ORGANIZATION INDEX
或任何符合您需求的内容现在查询
SELECT
mytable.*
FROM mytable
INNER JOIN lookup ON mytable.col1=lookup.col1 AND mytable.col2=lookup.col2
答案 1 :(得分:2)
很难说没有看到查询计划,但我想这会解决为FTS,其中有很多CPU在执行OR逻辑。
如果一般模式是col1 = x和col2 = y,那么尝试使用2000对创建一个表,然后加入。如果您的2000对来自其他表,请将select语句直接考虑在SELECT语句中。
同时确保你已经拥有所有唯一和NOT NULL约束,因为这会产生影响。考虑col1&的索引。如果它不使用它,不要感到惊讶。
不确定这是否可以解决问题,但如果没有,请发布更多细节。
答案 2 :(得分:0)
只选择您想要的列,而不是全部(*)......但是你肯定知道这一点。 但是如果你的SQL语句中有超过2000个OR,那么也许是时候改变它了!如果您向我们解释有关您的数据库的更多信息,我们会更好地帮助您。