在实际的工作中,尤其是在生产环境里边,SQL语句的优化问题十分的重要,它对数据库的性能的提升也起着显著的作用.我们总是在抱怨机器的性能问题,总是在抱怨并发访问所带来的琐问题,但是如果我们对没一条SQL语句进行优化,尽管不能说可以解决全部问题,但是至少可以解决大部分问题.
1.Top排序问题.
我们经常要对表某个字段进行排序,然后取前N名.所以我们会写如下的SQL语句:
selecttop100*from表
orderbyScoredesc
  如果表非常大的话,那么这样的操作是非常消耗资源的,因为SQLSERVER要对整个表进行排序,然后取前N条记录.这样的造作是在Temdb里边进行的,所以极端的时候会报Log已满这样的错误.为了避免进行全表的排序,我们要做的仅仅是在Score上建立索引,这样因为Score索引的叶级是有序的,只要在Score所以的页级取前100个,然后根据书签查找到实际的记录,这样对DB的性能就会有极大的提升.
2.同一天问题.
我们经常要查找和一个日期同一天的记录,所以我们回写如下的SQL语句;
declare@DateTimedatetime
set@DateTime=getdate()
select*from表
whereconvert(char(10),F_Time,120)=convert(char(10),@DateTime,120)
  但是这样写的SQL语句带来的问题就是不能使用F_Time上的索引了.为了近可能的使用F_Time上的索引,我们可以使用时间段查询的方式来代替上边的语句.
declare@startdatetime
declare@enddatetime
declare@datetimedatetime
set@datetime=getdate()
set@start=convert(char(10),@datetime,120)--一天的其始时间
set@end=dateadd(ss,-1,dateadd(d,1,@start))--一天的结束时间
select*from表whereF_Timebetween@startand@end
这样就解决了使用不上索引的问题.
3.利用索引进行分组操作.】  我们经常要对某一字段进行分组,而对另外一些字段进行聚合操作.如果我们对分组的字段合理的使用索引,可以加快我们分组的速度.下边以Northwind的Orders表为例:
--orders表的EmployeeID上建有索引.
selectEmployeeID,count(*)
fromorders
groupbyEmployeeID
--查看执行计划,此查询利用了EmployeeID上的索引.如改成如下查询:
selectEmployeeID,sum(Freight)
fromorders
groupbyEmployeeID
--查看执行计划,此查询则没有使用EmployeeID上的索引.而是使用了全表扫描.那么原因是什么呢?是因为Freight没有在EmployeeID的索引上,所以通过索引不能得到结果.而如果通过书签查询的成本太高,所以SQLSERVER选择了使用全表扫描.而如果我们执行在EmployeeID和Freight上建立复合索引呢?
createindexidx_EmployeeIDonorders(EmployeeID,Freight)
--再次执行第二个查询.查看执行计划.SQLSERVER使用的我们建立的索引.只需要使用索引就可以查询到结果,极大的提高了我们的查询速度.

更多相关文章

  1. MySQL 5.7.9 服务无法启动-“NET HELPMSG 3534”的解决方法
  2. ES6 变量声明,箭头函数,数组方法,解构赋值,JSON,类与继承,模块化练习
  3. 浅谈Java中Collections.sort对List排序的两种方法
  4. Python list sort方法的具体使用
  5. python list.sort()根据多个关键字排序的方法实现
  6. android上一些方法的区别和用法的注意事项
  7. android实现字体闪烁动画的方法
  8. Android中dispatchDraw分析
  9. Android四大基本组件介绍与生命周期

随机推荐

  1. Android 线性布局(LinearLayout)内各控件
  2. 线性布局和相对布局
  3. ListView背景修饰
  4. FrameLayout的使用
  5. android客户端和servlet服务端的简单登录
  6. android-android.hardware.Camera
  7. CountDownLatch
  8. 如何在你的本上或者pc上运行 Android [翻
  9. Android(安卓)Resource Framework
  10. Android(安卓)Content Provider Basics