我目前是一个初级开发人员,正在开发一个具有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是否添加了自己的优化,但可以肯定的是,没有在任何列上设置索引。
发布于 2011-05-02 06:58:22
你绝对应该在你的数据库上使用索引。它们使得插入和更新的成本更高,但您的查询将运行得更快,因此它们总体上可能是一个很大的胜利。索引对于具有大量值的列是最有效的(例如,对于性别列就不是那么有效)。它们对于where条件中经常引用的列更有效。在尝试索引时,请确保使用SQL EXPLAIN动词或db2expln之类的工具查看数据库的查询优化器是否正在利用它们。
发布于 2011-05-02 07:28:20
从您的示例来看,仅通过索引colOne就可以获得一定的性能。基本上,以与要使用的索引相同的顺序使用列。
发布于 2011-05-02 07:34:48
您可以通过在( colOne,colTwo,colThree,colFour,colFive )上创建索引来获得不错的性能提升。查询1、2和4都将使用它。
https://stackoverflow.com/questions/5851970
复制相似问题