索引问题:Select * with WHERE 子句。在哪里以及如何创建索引

Posted

技术标签:

【中文标题】索引问题:Select * with WHERE 子句。在哪里以及如何创建索引【英文标题】:Index question: Select * with WHERE clause. Where and how to create index 【发布时间】:2010-05-17 09:19:26 【问题描述】:

我正在优化我的一些查询,我有一个查询指出: 从 SC 中选择 * 其中 c_id ="+c_id" ** SC** 的架构如下所示:

SC (  c_id int not null,  date_start date not null, date_stop date not null, r_t_id int not null,  nt int,  t_p decimal,   PRIMARY KEY (c_id, r_t_id, date_start, date_stop));

我对如何创建索引的直接出价是按以下顺序覆盖索引:

INDEX(c_id, date_start, date_stop, nt, r_t_id, t_p)

我基于此订单的原因:

WHERE 子句从 c_id 中选择,从而使其成为第一个排序顺序。 接下来,date_start 和 date_stop 指定一个排序的“范围”,在这些参数中定义 接下来,nt 因为它会选择 nt 接下来是 r_t_id,因为它是我的 r_t 表的特定类型的 ID 最后是 t_p,因为它只是一个信息。

当它是一个 SELECT ALL 语句时,我不知道是否有必要以特定方式对其进行排序。 我应该说,SC 不是最大的表。我可以说它包含多少行,但估计可能在

接下来要补充的是,SC在不同的查询中,将数据插入到SC中,我知道有插入的表上的索引可以成本效益低,但我能否以某种方式创造一种黄金中间方式来提高这种性能。

不知道它是否有所不同,但我使用的是 IBM DB2 9.7 版数据库

真诚的

梅斯蒂卡

【问题讨论】:

【参考方案1】:

由于您说的是最多 1000 行,所以不要对索引太费心,除非您在生产中遇到问题。我从来没有见过 1000 行表是个问题。顺便说一句,您将 C_ID 配置为主键。因此,您不需要额外的索引,因为该表已经使用主键进行了排序。

【讨论】:

以上是关于索引问题:Select * with WHERE 子句。在哪里以及如何创建索引的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL SELECT WHERE LIKE WITH AES_ENCRYPT

MSSQL Select with "vertical"-where

SELECT * FROM X WHERE id IN (...) with Dapper ORM

SQL Select Top with Left Join 和 Where 子句

PHP SQL SELECT where like search item with multiple words

where column in from another select results with limit (mysql/mariadb)