2013-05-13 93 views
2

我试图想出一个办法来优化下面的SQL查询:优化where子句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. 

目前此查询需要很长的时间来执行,所以反正是有让这个查询运行得更快?

+3

发布解释计划。没有它,这是猜测。 – 2013-05-14 02:11:37

回答

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 
+0

+1,但似乎他需要一个临时表。 – haki 2013-05-14 06:12:24

2

很难说没有看到查询计划,但我想这是解决了一个FTS与大量的CPU做OR逻辑。

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

还要确保你已经得到了所有你的独特和NOT NULL限制,因为这将有所作为。考虑col1的索引,但是如果它不使用它,请不要感到惊讶。

不知道如果这是要做的伎俩,但发布更多的细节,如果没有。

0

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