如何为 SQL 表达式创建数据库索引?
Posted
技术标签:
【中文标题】如何为 SQL 表达式创建数据库索引?【英文标题】:How to create database INDEX for SQL expression? 【发布时间】: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 列创建索引还是如何?
谢谢
【问题讨论】:
【参考方案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 语句。你的提议是什么?在这种情况下索引是否会产生影响?谢谢以上是关于如何为 SQL 表达式创建数据库索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 CitusDB 的 cstore_fdw 添加索引?