数据库查询优化随想
今天做项目时遇到一个问题,一个有7W多条记录的视图,在视图中有了子查询操作,所以不能对视图建索引,在使用存储过程对视图分页查询时,相当的慢,所以直接采用SQL语句,使得查询加快,我写的如下
SELECT top 100* from varchivestock where Serialnumber not in (Select Serialnumber top 7009 from varchivestock)
但这样也只是快了10秒左右,查询仍要用10秒,后来同事写了另外一个语句给我
SELECT *
FROM dbo.VArchiveStock
WHERE (Serialnumber > 7009) AND (Serialnumber <=
(SELECT TOP 1 Serialnumber
FROM (SELECT TOP 100 Serialnumber
FROM dbo.VArchiveStock
WHERE (Serialnumber > 7009)
ORDER BY Serialnumber ASC) A
ORDER BY Serialnumber DESC))
结果执行只用了2秒 然后我查看了执行计划,对所用到的数据表重建索引,结果速度又快了1秒。
总结:查询时尽量不要使用集合操作,最好用条件操作来实现。以提高查询速度
SELECT top 100* from varchivestock where Serialnumber not in (Select Serialnumber top 7009 from varchivestock)
但这样也只是快了10秒左右,查询仍要用10秒,后来同事写了另外一个语句给我
SELECT *
FROM dbo.VArchiveStock
WHERE (Serialnumber > 7009) AND (Serialnumber <=
(SELECT TOP 1 Serialnumber
FROM (SELECT TOP 100 Serialnumber
FROM dbo.VArchiveStock
WHERE (Serialnumber > 7009)
ORDER BY Serialnumber ASC) A
ORDER BY Serialnumber DESC))
结果执行只用了2秒 然后我查看了执行计划,对所用到的数据表重建索引,结果速度又快了1秒。
总结:查询时尽量不要使用集合操作,最好用条件操作来实现。以提高查询速度
浙公网安备 33010602011771号