如何为 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 表达式创建数据库索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何为mysql中的现有表创建索引?

MySQL如何为表字段添加索引

如何为 CitusDB 的 cstore_fdw 添加索引?

如何为“日期”创建索引?

如何为uitableview的所有行和所有部分创建索引路径?

如何为clickhouse创建索引?