数据库:帮助我为表和查询提供正确的索引

时间:2010-05-20 15:45:15

标签: indexing db2 performance clustered-index covering-index

我正在我的数据库中运行一些查询并希望提高性能并创建了一些索引,但我仍然认为响应时间很长所以我想看看我是否可以创建更好的或另一个索引来增加速度。

我认为我的表格架构最大的瓶颈是这样的:

R_D(  **id** int not null,  **SDD** date not null,  numa int,   numt int,   price decimal,  
FOREIGN KEY (room_type_id) REFERENCES R_T (id)

有趣的是 SDD 属性,其中包含日期(例如2010-05-20),在我的查询中,我进行了这样的范围搜索:SDD> ='2010-05-03 '和SDD< '2010-05-08'

我所拥有的索引确实提高了性能,

INDEX sdd ON R_D (SDD, numa, numt, price, id)

问题是当我进行距离很远的范围搜索时,如2010-05-03和2010-06-04,执行查询需要大约6-10秒,我真的想调整它。

我在SDD上尝试了几个索引,甚至是一个集群索引,但我得到的最好结果是上面的索引。

真的很感激任何建议。

此致

Mestika

2 个答案:

答案 0 :(得分:1)

SELECT * FROM YourTable where SDD  BETWEEN  '2010-05-03' and '2010-05-08'

SDD是一个很好的索引列。如果您使用带有BETWEEN的索引列,那么与>=<=相比,效果会很好。

答案 1 :(得分:0)

如果您只是将查询更改为

,会发生什么
SELECT * FROM YourTable where SDD >= '2010-05-03' and SDD < '2010-05-08'

这将告诉您是否是导致减速的日期限制或其他内容。 此外,请确保数据库将“2010-05-08”解释为日期,而不是字符串。有些dbs具有特殊的日期语法,您可以尝试

SELECT * FROM YourTable where SDD >= DATE('2010-05-03') and SDD < DATE('2010-05-08')