恬谧

学习包容。容入团队,以自己之功劳为团队之功劳,以他人之过失为自己之过失
(坚绝反对南水北调西线工程,保卫长江源,保卫四川,保卫长江,坚绝反对在川渝建设核电站)
随笔 - 18, 文章 - 2, 评论 - 114, 引用 - 15
数据加载中……

数据库查询优化随想

        今天做项目时遇到一个问题,一个有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秒。


总结:查询时尽量不要使用集合操作,最好用条件操作来实现。以提高查询速度

posted on 2006-06-15 10:55 舒密 阅读(65) 评论(1)  编辑 收藏 所属分类: 数据库

评论

#1楼    回复  引用    

Serialnumber 这个是编号列?还是?
2008-06-16 19:59 | 无名菜鸟 [未注册用户]

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: