【问题标题】:Optimize Select Query Based on Multiple WHERE Conditions基于多个 WHERE 条件优化 Select 查询
【发布时间】:2023-03-23 20:25:01
【问题描述】:

我目前是一名初级开发人员,正在开发一个带有 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 是否添加了自己的优化,但可以肯定任何列上都没有设置索引。

【问题讨论】:

  • 您应该首先查看表定义,尽管我对 Java 或 DB2 了解不多,因此无法为您提供具体帮助。在大多数 sql 情况下,通过确保有适当的索引,可以大大改进此类查询。
  • 数据库没有任何索引。我之前想过创建一个,但不确定如何设置(即,我应该每列创建一个索引吗?还是应该在一个索引中有多个列?)
  • 您几乎正在做您可以用数据库做的最简单的事情。如果它们运行缓慢,您应该向表中添加索引。没有它们,您每次都在进行全表扫描。

标签: sql db2 query-optimization


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    从您的示例中,您似乎已经通过索引 colOne 获得了一些性能。 基本上,以与您要使用的索引相同的顺序使用列。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-25
        • 2015-10-12
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-06
        • 2016-06-02
        相关资源
        最近更新 更多