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

时间:2010-05-17 09:19:27

标签: database db2 indexing query-optimization

我正在努力优化我的一些查询,并且我有一个查询说明: 从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 不是最大的表。我可以说它包含多少行,但估计值可以在< 10到1000之间。

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

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

此致

Mestika

1 个答案:

答案 0 :(得分:0)

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