基于多个WHERE条件优化选择查询

时间:2011-05-01 22:45:47

标签: sql db2 query-optimization

我目前是一名负责使用Java / DB2后端的Web应用程序的初级开发人员,我有一些运行速度非常慢的SQL查询。目前数据库尚未优化,因此肯定有改进的余地。唯一的问题是我没有经验,没有人可以帮助我。

SomeTableName
MyPkey
ColOne
ColTwo
ColThree
ColFour
ColFive

我试图弄清楚如何针对这样的查询优化数据库:

SELECT * FROM SomeTableName WHERE ColOne = 'some value'
SELECT * FROM SomeTableName WHERE ColOne = 'some value' AND ColTwo = 'another'
SELECT * FROM SomeTableName WHERE ColFive = 11 AND ColThree = 'hello world'
SELECT * FROM SomeTableName WHERE ColOne = 'hi' AND ColTwo = 'val1' AND ColThree = 'val2' AND ColFour = 'val3' AND ColFive = 'val4'

我想要描绘的是,SELECT语句的WHERE条件具有不同的列组合和值,我不知道如何优化这样的查询。

有什么建议吗?

编辑:我不确定DB2是否添加了自己的优化,但确定在任何列上都没有设置索引。

3 个答案:

答案 0 :(得分:0)

您绝对应该使用数据库中的索引。它们使插入和更新变得更加昂贵,但是您的查询运行速度会更快,因此它们可能总体上是一个巨大的胜利。索引对于具有大量值的列(即,对于性别列而言不是那么多)最有效。它们对于您在何处条件下引用很多的列更有效。在尝试索引时,请确保使用SQL EXPLAIN谓词或类似db2expln的工具查看数据库的查询优化器是否正在利用它们。

答案 1 :(得分:0)

从您的示例中,看起来您只需通过索引colOne就可以获得一些性能。 基本上,使用与您要使用的索引相同顺序的列。

答案 2 :(得分:0)

通过在(colOne,colTwo,colThree,colFour,colFive)上创建索引,您可以获得不错的性能提升。查询1,2和4都将使用它。