Indexing 数据库:帮助我为表和查询创建正确的索引

Indexing 数据库:帮助我为表和查询创建正确的索引,indexing,db2,performance,clustered-index,covering-index,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) 有趣的是包含日期(例如2010-05-20)

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

我认为表的模式有最大的瓶颈,如下所示:

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)
有趣的是包含日期(例如2010-05-20)的SDD属性,在我的查询中,我进行了如下范围搜索: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

如果将查询更改为

SELECT * FROM YourTable where SDD >= '2010-05-03' and SDD < '2010-05-08'
从您的表中选择*,其中SDD>='2010-05-03'和SDD<'2010-05-08'
这会告诉你是日期限制导致了减速还是其他原因。 另外,确保数据库将“2010-05-08”解释为日期,而不是字符串。有些数据库对日期有特殊的语法,您可以试试

SELECT * FROM YourTable where SDD >= DATE('2010-05-03') and SDD < DATE('2010-05-08')
从表中选择*,其中SDD>=日期('2010-05-03')和SDD<日期('2010-05-08')

SDD
是良好的索引列。如果您使用的索引列在
之间,与
=
相比,性能良好,请发布您正在运行的查询。
SELECT * FROM YourTable where SDD  BETWEEN  '2010-05-03' and '2010-05-08'