欢迎来到天天文库
浏览记录
ID:34726043
大小:108.75 KB
页数:20页
时间:2019-03-10
《sqlserver笔记性能优化和用法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、A.SQL性能优化1.查询的模糊匹配尽量避免在一个复杂查询里面使用LIKE'%parm1%'——红色标识位置的百分号会导致相关列的索引无法使用,最好不要用.解决办法:其实只需要对该脚本略做改进,查询速度便会提高近百倍。改进方法如下:a、修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就帮忙定位到具体的供应商,这样在调用后台程序时,这列就可以直接用等于来关联了。b、直接修改后台——根据输入条件,先查出符合条件的供应商,并把相关记录保存在一个临时表里
2、头,然后再用临时表去做复杂关联2.索引问题在做性能跟踪分析过程中,经常发现有不少后台程序的性能问题是因为缺少合适索引造成的,有些表甚至一个索引都没有。这种情况往往都是因为在设计表时,没去定义索引,而开发初期,由于表记录很少,索引创建与否,可能对性能没啥影响,开发人员因此也未多加重视。然一旦程序发布到生产环境,随着时间的推移,表记录越来越多这时缺少索引,对性能的影响便会越来越大了。这个问题需要数据库设计人员和开发人员共同关注法则:不要在建立的索引的数据列上进行下列操作:◆避免对索引字段进行计算操作◆避免在索
3、引字段上使用not,<>,!=◆避免在索引列上使用ISNULL和ISNOTNULL◆避免在索引列上出现数据类型转换◆避免在索引字段上使用函数◆避免建立索引的列中使用空值。3.复杂操作部分UPDATE、SELECT语句写得很复杂(经常嵌套多级子查询)——可以考虑适当拆成几步,先生成一些临时数据表,再进行关联操作4.在可以使用UNIONALL的语句里,使用了UNIONUNION查询出所有不重复的数据,可去重UNIONALL查询出所有数据,包括重复数据UNION因为会将各查询子集的记录做比较,故比起UNIONA
4、LL,通常速度都会慢上许多。一般来说,如果使用UNIONALL能满足要求的话,务必使用UNIONALL。还有一种情况大家可能会忽略掉,就是虽然要求几个子集的并集需要过滤掉重复记录,但由于脚本的特殊性,不可能存在重复记录,这时便应该使用UNIONALL,如xx模块的某个查询程序就曾经存在这种情况,由于语句的特殊性,在这个脚本中几个子集的记录绝对不可能重复,故可以改用UNIONALL)1.避免在WHERE子句中使用in,not in,or或者having可以使用exist和notexist代替in和notin
5、。可以使用表链接代替exist。Having可以用where代替,如果无法代替可以分两步处理。例子SELECT*FROMORDERSWHERECUSTOMER_NAMENOTIN(SELECTCUSTOMER_NAMEFROMCUSTOMER)优化后SELECT*FROMORDERSWHERECUSTOMER_NAMEnotexist(SELECTCUSTOMER_NAMEFROMCUSTOMER)2.不要以字符格式声明数字,要以数字格式声明字符值日期同样)否则会使索引无效,产生全表扫描。例子使用:SEL
6、ECTemp.ename,emp.jobFROMempWHEREemp.empno=7369;不要使用:SELECTemp.ename,emp.jobFROMempWHEREemp.empno=‘7369’3.对Select语句的法则在应用程序、包和过程中限制使用select*fromtable这种方式。看下面例子使用SELECTempno,ename,categoryFROMempWHEREempno='7369’而不要使用SELECT*FROMempWHEREempno='7369'4.慎重使用临时表
7、可以极大的提高系统性能5.使用索引来更快地遍历表缺省情况下建立的索引是非聚集索引,但有时它并不是最佳的。在非聚集索引下,数据在物理上随机存放在数据页上。合理的索引设计要建立在对各种查询的分析和预测上。一般来说:①有大量重复值、且经常有范围查询(between,>,<,>=,<=)和orderby、groupby发生的列,可考虑建立群集索引;①经常同时存取多列,且每列都含有重复值可考虑建立组合索引;②组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列1.ISNULL与ISNOTNULL不能用
8、null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。任何在where子句中使用isnull或isnotnull的语句优化器是不允许使用索引的2.全文目录的使用全文索引与普通的索引不同,普通的索引是以B-tree结构来维护的,而全文索引是一种特殊类型的基于标记的功能性索引,是由Mi
此文档下载收益归作者所有