sqlserver优化器
⑴ 如何对sqlserver进行简单的优化
SQL Server数据库查询速度慢的原因有很多,常见的有以下几种:
1、没有索引或者没有用到索引(这是查询慢最常见的问题,是数据库设计的缺陷)
2、I/O吞吐量小,形成了瓶颈效应。
3、没有创建计算列导致查询不优化。
4、内存不足
5、网络速度慢
6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
9、返回了不必要的行和列
10、查询语句不好,没有优化
●可以通过以下方法来优化查询 :
1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在支持。数据量(尺寸)越大,提高I/O越重要。
2、纵向、横向分割表,减少表的尺寸(sp_spaceuse)
3、升级硬件
4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段。
⑵ sqlserver 优化,具体怎么优化 不要混分的.
1 条件列都建单键索引,isnull的列建函数索引
2 如果可能,不用or,in,尽量用union改写
3 如果是日常操作,游标肯定得要,因为你更改状态后,还要插入日志
4 如果是一次性处理,可以再保证没有别人用的情况下,
用 insert into history ... select ... 的写法写日志
用update ... from 的方法 统一更新订单状态,
然后统一commit即可
⑶ sqlserver 查询语句优化
你后面这些条件都错误:
( cc.business='INSPECTION' and bil.customer_name like '%' + cl.client_name + '%' or
cc.business='INSPECTION' and bil.header_dff_value12 like '%' + cl.client_name + '%' or
cc.business='INSPECTION' and bil.header_dff_value13 like '%' + cl.client_name + '%' or
cc.business='INSPECTION' and bil.ship_to_party_name like '%' + cl.client_name + '%' or
cc.business='INSPECTION' and bil.header_dff_value6 like '%' + cl.client_name + '%' or
cc.business='AUDIT' and bil.customer_name like '%' + cl.client_name + '%' or
cc.business='AUDIT' and bil.header_dff_value13 like '%' + cl.client_name + '%' or
cc.business='AUDIT' and bil.ship_to_party_name like '%' + cl.client_name + '%' or
cc.business='AUDIT' and bil.header_dff_value6 like '%' + cl.client_name + '%' or
cc.business='TESTING' and bil.customer_name like '%' + cl.client_name + '%' or
cc.business='TESTING' and bil.header_dff_value12 like '%' + cl.client_name + '%' or
cc.business='TESTING' and bil.ship_to_party_name like '%' + cl.client_name + '%' )
你这样的条件查出来的结果应该是不对的
再这,我认为你那块条件可以不需要,你再上面已经处理过,下面还有意义吗?
⑷ Sqlserver 语法优化
这样的语句在写法上的优化应该没有什么了,就是检查一下查询条件、相关联字段及group by 分组字段有没有索引,没有的话可以加上索引来优化。
⑸ SQLServer求优化
因为你的查询使用的是 【or】,这样虽然你的数据库上建了索引但是实际上,数据库并没有用到这个索引建议,拆开写。
如:
select * from sms_history
where servertel='059512345678'
and sendtime between '2009-08-01' and '2009-09-01'
union
select * from sms_history
where usertel='059512345678'
and sendtime between '2009-08-01' and '2009-09-01'
再在(servertel,sendtime)和(usertel,sendtime)分别建个索引,估计能快些。
---
以上,希望对你有所帮助。
⑹ 求优化sqlserver语句,使它查询效率提高。(要求:分组查询每组最新的一条数据,数据量非常大,几十万)
关于题主的SQL语句提高效率的问题,请留意一下几点
1) 输出的字段列表里只有来自表“dbo.tunnel_online_monitoring ”里的字段信息,没有任何来字段取自表“dbo.Threshold_ElectronicPool”,而且语句也没为这两张表指定连接条件,因此将表“dbo.Threshold_ElectronicPool”引入语句中就没有任何必要,加入该表只会大大增加系统开销,而无得益,应予以剔除;
2)row_number()函数的系统开销是比较大的,能不用尽量别用它。
如果dbo.tunnel_online_monitoring.Id是唯一的,可以不使用row_number()函数,建议语句修改如下:
selectId,CreationDate,LastUpdate,tunnel_name,
SDMC,DT,DZSC1,DZSC2,DZSC3from
tunnel_online_monitoringwhereidin(
selectmax(a.id)fromdbo.tunnel_online_monitoringa,
(selecttunnel_name,max(CreationDate)asCreationDatefrom
dbo.tunnel_online_monitoringgroupbytunnel_name)b
wherea.tunnel_name=b.tunnel_nameanda.CreationDate
=b.CreationDategroupbyb.tunnel_name);
如果dbo.tunnel_online_monitoring.Id是自增ID,那么可以根据ID的大小来判定那条记录是最新的,这样就不需要比对时间字段的先后了,语句可简化如下:
selectId,CreationDate,LastUpdate,tunnel_name,
SDMC,DT,DZSC1,DZSC2,DZSC3from
tunnel_online_monitoringwhereidin(
selectmax(id)fromdbo.tunnel_online_monitoring
groupbytunnel_name);
如果dbo.tunnel_online_monitoring.Id不是唯一的,那就还是得利用回row_number()函数了。
⑺ 如何做SqlServer 数据查询优化!
一、建立索引
二、建立存储过程
三、只查询您所需要的数据,不要把所有数据都查询出来,防止数据冗余。
四、对于大量及海量数据一般还要建立分区
⑻ sqlserver 查询的优化
试着创建一个函数索引:
dbo.getYearmonth(recdate,recdt)
⑼ sqlserver的分析优化工具有哪些
sql server profiler功能
此工具比柯南还柯南,因为他能检测到数据库中的一举一动,即便你不动他,他也在监视你,他很贱的。他不但监视,还监视的很详细,有多详细一会再说,还把监视的内容记录到数据库或者是文件中,给你媳妇告状说你把数据库哪里的性能搞的多么不好,不过他也会把好的给你记录下来,好与不好这当然需要你来分析,其实他也是个很2的柯南。
数据库引擎优化顾问功能
此武功,乃上乘武功。像张无忌的干坤大挪移,先是接受sql server profiler检测出来的sql,视图,存储过程,数据结构等等,然后他再自己分析,然后再在怀中转两圈,感觉自己转的差不多啦,就给抛出来个威力更炫,更好的索引,统计,分区等等建议信息。让你承受不住,happly致死。