没有合适的资源?快使用搜索试试~ 我知道了~
sql优化总结,针对一般sql语句的优化编写进行总结整理,有助于形成良好的sql语句书写习惯
资源推荐
资源详情
资源评论
一、在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率。在子查询中,NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。
如:
我要查询 Sendorder表中的冗余数据(没有和reg_person或worksite相连的数据)
select Sendorder.id,Sendorder.reads,Sendorder.addtime
from Sendorder
where Sendorder.person_id not in(select user_id from reg_person )
or Sendorder.worksite_id not in(select id from worksite)
order by Sendorder.addtime desc
程序执行时间:40109.38毫秒
select Sendorder.id,Sendorder.reads,Sendorder.addtime
from Sendorder
where not EXISTS (SELECT id FROM reg_person where reg_person.user_id=Sendorder.person_id)
or not EXISTS (SELECT id FROM worksite where worksite.id=Sendorder.worksite_id)
order by Sendorder.addtime desc
程序执行时间:8531.25毫秒
很明显使用not EXISTS效率高多了
二、TOP关键词是 SQL SERVER中经过系统优化过的一个用来提取前几条或前几个百分比数据的词。经笔者在实践中的应用,发现TOP确实很好用,效率也很高。
order by按聚集索引列排序效率最高
如果用count(*)和用count(主键)的速度是相当的,而count(*)却比其他任何除主键以外的字段汇总速度要快,而且字段越长,汇总的速度就越慢。我想,如果用count(*), SQL SERVER可能会自动查找最小字段来汇总的。当然,如果您直接写count(主键)将会来的更直接些。
字段提取要按照“需多少、提多少”的原则,避免“select *”
在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。
如:
我要查询 Sendorder表中的冗余数据(没有和reg_person或worksite相连的数据)
select Sendorder.id,Sendorder.reads,Sendorder.addtime
from Sendorder
where Sendorder.person_id not in(select user_id from reg_person )
or Sendorder.worksite_id not in(select id from worksite)
order by Sendorder.addtime desc
程序执行时间:40109.38毫秒
select Sendorder.id,Sendorder.reads,Sendorder.addtime
from Sendorder
where not EXISTS (SELECT id FROM reg_person where reg_person.user_id=Sendorder.person_id)
or not EXISTS (SELECT id FROM worksite where worksite.id=Sendorder.worksite_id)
order by Sendorder.addtime desc
程序执行时间:8531.25毫秒
很明显使用not EXISTS效率高多了
二、TOP关键词是 SQL SERVER中经过系统优化过的一个用来提取前几条或前几个百分比数据的词。经笔者在实践中的应用,发现TOP确实很好用,效率也很高。
order by按聚集索引列排序效率最高
如果用count(*)和用count(主键)的速度是相当的,而count(*)却比其他任何除主键以外的字段汇总速度要快,而且字段越长,汇总的速度就越慢。我想,如果用count(*), SQL SERVER可能会自动查找最小字段来汇总的。当然,如果您直接写count(主键)将会来的更直接些。
字段提取要按照“需多少、提多少”的原则,避免“select *”
在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。
资源评论
Jassicrs
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功