【问题标题】:How to create database INDEX for SQL expression?如何为 SQL 表达式创建数据库索引?
【发布时间】:2012-10-09 09:37:34
【问题描述】:

我是索引的初学者。我想为这个 SQL 表达式创建索引,这需要太多时间来执行,所以我想在哪些确切的列上创建索引? 我正在使用 DB2 db,但没关系,我认为这个问题很笼统。

我的 SQL 表达式是:

select * from incident  where (relatedtoglobal=1) 
and globalticketid in (select ticketid from INCIDENT where status='RESOLVED')
     and statusdate <='2012-10-09 12:12:12'

我应该用这 5 列创建索引还是如何?

谢谢

【问题讨论】:

    标签: sql indexing db2 database-indexes


    【解决方案1】:

    您的查询:

    select * 
    from incident  
    where relatedtoglobal = 1 
      and globalticketid in ( select ticketid 
                              from INCIDENT 
                              where status='RESOLVED'
                            )
      and statusdate <='2012-10-09 12:12:12' ;
    

    还有里面的子查询:

    select ticketid 
    from INCIDENT 
    where status='RESOLVED'
    
    • (status, ticketid) 上的索引肯定会提高子查询评估的效率,从而提高查询的效率。

    • 对于查询,除了前一个索引之外,您还需要一个索引。 (relatedtoglobal, globalticketid) 可能就足够了。

    我不确定 DB2 引擎是否会/可以使用更复杂的索引。

    • 赞一个(relatedtoglobal, globalticketid) INCLUDE (statusdate)

    • 两个索引,一个在(relatedtoglobal, globalticketid),一个在(relatedtoglobal, statusdate)


    DB2 文档不容易阅读,但有很多细节。从 CREATE INDEX 声明和 Implementing Indexes 开始。

    【讨论】:

    • 感谢您提供有用的答案..但对不起索引是什么?
    • 好的,谢谢.. 如何知道我可以创建的最大索引?因为我知道他们会减慢插入更新删除的速度。所以如何不破坏系统的某些最大值,这会减慢我的应用程序
    • 还有一个问题,什么是 INCLUDE(状态日期)?创建索引的时候应该加上这个语句吗?
    • 不用担心性能问题,尤其是那些你怀疑在 INSERT 和 UPDATE 时没有的问题。那是过早的优化。
    • 您好,感谢您的帮助,感谢你们两个,我取得了一些进展。但我还有一个难题。对于这个花费我太多时间的查询 select * from TABLE where (upper(COLUMN1) like '%HGW%')) 我应该创建索引吗?因为 LIKE 和 UPPER 语句。你的提议是什么?在这种情况下索引是否会产生影响?谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2021-12-01
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多