2

我正在尝试找出一种优化以下 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.

目前这个查询需要很长时间才能执行,那么有没有办法让这个查询运行得更快呢?

4

3 回答 3

3
  • 创建一个查找表CREATE TABLE lookup (col1 INT, col2 VARCHAR(3), PRIMARY KEY(col1, col2), KEY(col2)) ORGANIZATION INDEX或任何适合您的需要
  • 确保您在原始表(col1 和 col2)上有索引
  • 用您的 2000 个组合填充查找表

现在查询

SELECT 
  mytable.*
FROM mytable
INNER JOIN lookup ON mytable.col1=lookup.col1 AND mytable.col2=lookup.col2
于 2013-05-13T22:57:45.587 回答
2

很难说没有看到查询计划,但我想这可以解决一个有很多 CPU 执行 OR 逻辑的 FTS。

如果一般模式是 col1=x 和 col2=y,那么请尝试使用 2000 对创建一个表并改为加入。如果您的 2000 对来自其他表,请将检索它们的 select 语句直接放入您的 SELECT 语句中。

还要确保你有所有独特的和 NOT NULL 约束,因为这会有所作为。考虑 col1 和 col2 上的索引,但如果它不使用它也不要感到惊讶。

不确定这是否会奏效,但如果没有,请发布更多详细信息。

于 2013-05-13T22:55:36.333 回答
0

只选择您想要的列,而不是全部 (*)... 但您肯定知道这一点。但是如果你的 SQL 语句中有超过 2000 个 OR,也许是时候改变它了!如果您向我们解释更多有关您的数据库的信息,我们会为您提供更好的帮助。

于 2015-10-30T13:09:05.033 回答