我有以下sql语句,我需要更快。 有500k行,我是'HARDWARE_ID'的索引,但这仍然需要一秒钟才能执行。
有没有人有任何想法?
select
*
from
DEVICE_MONITOR DM
where
DM.DM_ID = (
select
max(DM_ID)
from
DEVICE_MONITOR
where
HARDWARE_ID=#value#
)
我发现以下索引也是一个很好的帮助...
在DEVICE_MONITOR上创建索引DM_IX4(DM_ID,HARDWARE_ID);
在我的测试中,它将运行时间从26秒降低到20秒。
感谢您的帮助。
答案 0 :(得分:2)
DM_ID的索引应创建为asc
问题可能在于你发现了非常快速的匹配形式HARDWARE_ID,但是那些记录必须排序以从中获取最大值并且此操作非常耗时。
尝试比较这些陈述:
1 #result = select max(DM_ID) from DEVICE_MONITOR where HARDWARE_ID=#value#
2 select * from DEVICE_MONITOR DM where DM.DM_ID = #result
查询1是问题,因为您将看到2正在更快地运行
如果创建了索引,并且查询仍然运行缓慢,则可以更新统计信息。但其他查询可能只会更慢。
如果可能而不是*仅使用您真正需要的列
答案 1 :(得分:1)
考虑将“*”更改为仅需要的属性列表。通常情况下,这可以大大提高你的速度。
答案 2 :(得分:0)
如果您在DM_ID上有聚簇索引,那么这看起来就像是最快的查询。
编辑:Ack。丹尼尔有正确的答案。错过了。