SQL SERVER优化建议

这个名没人起8

这个名没人起8

2016-01-29 15:55

SQL SERVER优化建议,SQL SERVER优化建议

在实际的工作中,尤其是在生产环境里边,SQL语句的优化问题十分的重要,它对数据库的性能的提升也起着显著的作用.我们总是在抱怨机器的性能问题,总是在抱怨并发访问所带来的琐问题,但是如果我们对没一条SQL语句进行优化,尽管不能说可以解决全部问题,但是至少可以解决大部分问题.

1.Top排序问题.

我们经常要对表某个字段进行排序,然后取前N名.所以我们会写如下的SQL语句:

select top 100 * from 表

order by Score desc

如果表非常大的话,那么这样的操作是非常消耗资源的,因为SQL SERVER要对整个表进行排序,然后取前N条记录.这样的造作是在Temdb里边进行的,所以极端的时候会报Log已满这样的错误.为了避免进行全表的排序,我们要做的仅仅是在Score上建立索引,这样因为Score索引的叶级是有序的,只要在Score所以的页级取前100个,然后根据书签查找到实际的记录,这样对DB的性能就会有极大的提升.

2.同一天问题.

我们经常要查找和一个日期同一天的记录,所以我们回写如下的SQL语句;

declare @DateTime datetime

set @DateTime=getdate()

select * from 表

where convert(char(10),F_Time,120)=convert(char(10),@DateTime,120)

但是这样写的SQL语句带来的问题就是不能使用F_Time上的索引了.为了近可能的使用F_Time上的索引,我们可以使用时间段查询的方式来代替上边的语句.

declare @start datetime

declare @end datetime

declare @datetime datetime

set @datetime=getdate()

set @start=convert(char(10),@datetime,120)  --  一天的其始时间

set @end=dateadd(ss,-1,dateadd(d,1,@start))  --  一天的结束时间

select *

from 表

where F_Time between @start and @end

这样就解决了使用不上索引的问题.

 3.利用索引进行分组操作.

我们经常要对某一字段进行分组,而对另外一些字段进行聚合操作.如果我们对分组的字段合理的使用索引,可以加快我们分组的速度.下边以Northwind的Orders表为例:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)

--  orders表的EmployeeID上建有索引.

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/sqlserver/)


select EmployeeID,count(*)
from orders
group by EmployeeID

--  查看执行计划,此查询利用了EmployeeID上的索引.如改成如下查询:

select EmployeeID,sum(Freight)
from orders
group by EmployeeID

--  查看执行计划,此查询则没有使用EmployeeID上的索引.而是使用了全表扫描.那么原因是什么呢?是因为Freight没有在EmployeeID的索引上,所以通过索引不能得到结果.而如果通过书签查询的成本太高,所以SQL SERVER选择了使用全表扫描.而如果我们执行在EmployeeID和Freight上建立复合索引呢?

create index idx_EmployeeID on Orders(EmployeeID,Freight)

--  再次执行第二个查询.查看执行计划.SQL SERVER使用的我们建立的索引.只需要使用索引就可以查询到结果,极大的提高了我们的查询速度.

展开更多 50%)
分享

猜你喜欢

SQL SERVER优化建议

SQLServer
SQL SERVER优化建议

SQL SERVER的优化建议与方法

编程语言 网络编程
SQL SERVER的优化建议与方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server索引的使用和优化

编程语言 网络编程
SQL Server索引的使用和优化

优化SQL Server索引的小技巧

SQLServer
优化SQL Server索引的小技巧

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

浅谈如何优化SQL Server服务器

编程语言 网络编程
浅谈如何优化SQL Server服务器

SQL Server存储过程编写和优化措施

编程语言 网络编程
SQL Server存储过程编写和优化措施

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何使用SQL Server数据库查询累计值

如何使用SQL Server数据库查询累计值

《天天炫斗》攻略之新道具经验胶囊使用心得

《天天炫斗》攻略之新道具经验胶囊使用心得
下拉加载更多内容 ↓