高密市时代互联网服务中心
繁體中文

共享资料

主页 → 共享资料 → 数据库

VIP资料 VIP资料
VB及ASP编程 VB及ASP编程
相关知识 相关知识
图象制作 图象制作
图片资料 图片资料
数据库 数据库
资料下载 资料下载

共享资料热点信息

MS SQL server 2005设置 MS SQL server 2005设置
解决windows2003默认只有200k的图片上传限制的方法 解决windows2003默认只有200k的…
ms server2005 聚集索引与非聚集索引使用的情况 ms server2005 聚集索引与非聚集…
sqlserver2005添加维护计划出错 sqlserver2005添加维护计划出错…
server2005数据类型 server2005数据类型
SQL Server 2005服务器配置 SQL Server 2005服务器配置
server2005导入数据库 server2005导入数据库
mssql数据库isnull用法 mssql数据库isnull用法
sql2005对数据库重命名 sql2005对数据库重命名
MS SQL Server查询优化方法 MS SQL Server查询优化方法

信息搜索

(支持信息首拼字母)

浏览:3089  [字号: 正常]
分享到:

MS SQL Server查询优化方法

    1、如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引,耗空间。like 'a%' 使用索引 like '%a' 不使用索引用 like '%a%' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR。对于字段的值很长的建全文索引。
    2、在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了网络的负担降低性能。如果表很大,在表扫描的期间将表锁住,禁止其他的联接访问表,后果严重。
    3、查询时不要返回不需要的行、列。
    4、用select top 100 / 10 Percent 来限制用户返回的行数或者SET ROWCOUNT来限制操作的行。
    5、如果使用了IN或者OR等时发现查询没有走索引,使用显示申明指定索引:
    SELECT * FROM PersonMember (INDEX = IX_Title) WHERE processid IN (‘男’,‘女’) 。
    6、Between在某些时候比IN速度更快,Between能够更快地根据索引找到范围。用查询优化器可见到差别。
    select * from chineseresume where title in ('男','女')
    Select * from chineseresume where between '男' and '女'
    是一样的。由于in会在比较多次,所以有时会慢些。
    7、一次更新多条记录比分多次更新每次一条快,就是说批处理好。
    8、不要在一句话里再三的使用相同的函数,浪费资源,将结果放在变量里再调用更快。
    9、SELECT COUNT(*)的效率教低,尽量变通他的写法,而EXISTS快.同时请注意区别:
    select count(Field of null) from Table 和 select count(Field of NOT null) from Table
    的返回值是不同的。
    10、用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:
    ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。
    推荐方案:在业务密集的SQL当中尽量不采用IN操作符,用EXISTS方案代替。
    11、NOT IN操作符
    此操作是强列不推荐使用的,因为它不能应用表的索引。
    推荐方案:用NOT EXISTS 方案代替。
    12、IS NULL 或IS NOT NULL操作(判断字段是否为空),判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的。
    推荐方案:用其它相同功能的操作运算代替,如:a is not null 改为 a>0 或a>’’等。不允许字段为空,而用一个缺省值代替空值,如申请中状态字段不允许为空,缺省为申请。
    13、> 及 < 操作符(大于或小于操作符)
    大于或小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找,但有的情况下可以对它进行优化,如一个表有100万记录,一个数值型字段A,30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A>2与A>=3的效果就有很大的区别了,因为A>2时ORACLE会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录索引。
    14、LIKE操作符
    LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。
    一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个条件会产生全表扫描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。
    15、WHERE后面的条件顺序影响
    WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响。如:
    Select * from zl_yhjbqk where dy_dj = '1KV以下' and xh_bz=1
    Select * from zl_yhjbqk where xh_bz=1 and dy_dj = '1KV以下'
    以上两个SQL中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的时候99%条记录都进行dy_dj及xh_bz的比较,而在进行第二条SQL的时候0.5%条记录都进行dy_dj及xh_bz的比较,以此可以得出第二条SQL的CPU占用率明显比第一条低。
    16、查询表顺序的影响
    在FROM后面的表中的列表顺序会对SQL执行性能影响,在没有索引及ORACLE没有对表进行统计分析的情况下,ORACLE会按表出现的顺序进行链接,由此可见表的顺序不对时会产生十分耗服物器资源的数据交叉。(注:如果对表进行了统计分析,ORACLE会自动先进小表的链接,再进行大表的链接)。


·上一篇:sql server2005数据库及日志文件收缩
·下一篇:解决windows2003默认只有200k的图片上传限制的方法
站内查询(支持首拼):
主 页 关于我们 新闻中心 产品介绍 业务范围 共享资料 服务支持 案例展示 站长专题 人力资源 音视频 电子地图 会员中心 在线付款

鲁ICP备11021577号

Copyright © 2003-2026 版权所有:时代互联网服务中心

电话:13287488567 0536-2378816 邮箱:xzs0001@163.com  QQ:173807448 632406796

建议使用 1152×864 及以上分辨率浏览

技术服务:时代互联网服务中心 访问量: 89127815(人次) 目前在线:11人
1