为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

查询慢的原因

2011-03-05 4页 pdf 177KB 29阅读

用户头像

is_086804

暂无简介

举报
查询慢的原因 sql查询分析器:SQL查询慢的48个原因分析 疯狂代码 http://www.crazycoder.cn/ ĵ:http:/www.crazycoder.cn/DataBase/Article70163.html 工作小编写质量高并且执行速度快   28、如果要插入大 2进制值到Image列使用存储过程千万不要用内嵌INsert来插入(不知JAVA是否)这样应 用首先将 2进制值转换成串(尺寸是它两倍)服务器受到后又将他转换成 2进制值.存储过程就没有这些动作: ...
查询慢的原因
sql查询分析器:SQL查询慢的48个原因分析 疯狂代码 http://www.crazycoder.cn/ ĵ:http:/www.crazycoder.cn/DataBase/Article70163.html 工作小编写质量高并且执行速度快   28、如果要插入大 2进制值到Image列使用存储过程千万不要用内嵌INsert来插入(不知JAVA是否)这样应 用首先将 2进制值转换成串(尺寸是它两倍)服务器受到后又将他转换成 2进制值.存储过程就没有这些动作: 思路 :Create procedure p_insert as insert o table(Fimage) values (@image), 在前台这个存储过程传入 2进 制参数这样处理速度明显改善   29、Between在某些时候比IN速度更快,Between能够更快地根据索引找到范围用查询优化器可见到差别 select * from chineseresume where title in ('男','女') Select * from chineseresume where between '男' and '女' 是样由于in会在比较多次所以有时会慢些   30、在必要是对全局或者局部临时创建索引有时能够提高速度但不是定会这样索引也耗费大量资源他创 建同是实际表样   31、不要建没有作用事物例如产生报表时浪费资源只有在必要使用事物时使用它   32、用OR字句可以分解成多个查询并且通过UNION 连接多个查询他们速度只同是否使用索引有关,如果查 询需要用到联合索引用UNION all执行效率更高.多个OR字句没有用到索引改写成UNION形式再试图和索引匹 配个关键问题是否用到索引   33、尽量少用视图它效率低对视图操作比直接对表操作慢,可以用stored procedure来代替她特别是不要用 视图嵌套,嵌套视图增加了寻找原始资料难度我们看视图本质:它是存放在服务器上被优化好了已经产生了查询规 划SQL对单个表检索数据时不要使用指向多个表视图直接从表检索或者仅仅包含这个表视图上读否则增加了不 必要开销,查询受到干扰.为了加快视图查询MsSQL增加了视图索引功能   34、没有必要时不要用DISTINCT和ORDER BY这些动作可以改在客户端执行它们增加了额外开销这同 UNION 和UNION ALL样道理 SELECT top 20 ad.companyname,comid,position,ad.referenceid,worklocation, convert(varchar(10),ad.postDate,120) as postDate1,workyear,degreedescription FROM jobcn_query.dbo.COMPANYAD_query ad where referenceID in('JCNAD00329667','JCNAD132168','JCNAD00337748','JCNAD00338345','JCNAD00333138','JCNAD0 0303570', 'JCNAD00303569','JCNAD00303568','JCNAD00306698','JCNAD00231935','JCNAD00231933','JCNAD00 254567', 'JCNAD00254585','JCNAD00254608','JCNAD00254607','JCNAD00258524','JCNAD00332133','JCNAD00 268618', 'JCNAD00279196','JCNAD00268613') order by postdate desc   35、在IN后面值列表中将出现最频繁值放在最前面出现得最少放在最后面减少判断次数   36、当用SELECT INTO时它会锁住系统表(sysobjectssysindexes等等)阻塞其他连接存取创建临时表时用 显示申明语句而不是select INTO. drop table t_lxh begin tran select * o t_lxh from chineseresume where name = 'XYZ' --commit 在另个连接中SELECT * from sysobjects可以看到 SELECT INTO 会锁住系统表 Create table 也会锁系统表(不管是临时表还是系统表)所以千万不要在事物内使用它!!!这样话如果是经常要用临 时表请使用实表或者临时表变量   37、般在GROUP BY 个HAVING字句的前就能剔除多余行所以尽量不要用它们来做剔除行工作他们执行顺 序应该如下最优:select Where字句选择所有合适行Group By用来分组个统计行Having字句用来剔除多余分组 这样Group By 个Having开销小查询快.对于大数据行进行分组和Having十分消耗资源如果Group BY目不包括 计算只是分组那么用Distinct更快 38、次更新多条记录比分多次更新每次条快,就是说批处理好   39、少用临时表尽量用结果集和Table类性变量来代替它,Table 类型变量比临时表好   40、在SQL2000下计算字段是可以索引需要满足条件如下:   a、计算字段表达是确定   b、不能用在 TEXT,NtextImage数据类型   c、必须配制如下选项 ANSI_NULLS = _disibledevent=>  41、尽量将数据处理工作放在服务器上减少 网络开销如使用存储过程存储过程是编译好、优化过、并且被组织到个执行规划里、且存储在数据库中SQL语 句是控制流语言集合速度当然快反复执行动态SQL,可以使用临时存储过程该过程(临时表)被放在Tempdb中以 前由于SQL SERVER对复杂数学计算不支持所以不得不将这个工作放在其他层上而增加网络开销SQL2000支持 UDFs,现在支持复杂数学计算返回值不要太大这样开销很大用户自定义象光标样执行消耗大量资源如果返回大 结果采用存储过程   42、不要在句话里再 3使用相同浪费资源,将结果放在变量里再更快   43、SELECT COUNT(*)效率教低尽量变通他写法而EXISTS快.同时请注意区别: select count(Field of null) from Table 和 select count(Field of NOT null) from Table 返回值是区别!!!   44、当服务器内存够多时配制线程数量 = 最大连接数+5这样能发挥最大效率;否则使用 配制线程数量<最 大连接数启用SQL SERVER线程池来解决,如果还是数量 = 最大连接数+5严重损害服务器性能   45、按照定次序来访问你表如果你先锁住表A再锁住表B那么在所有存储过程中都要按照这个顺序来锁定它 们如果你(不经意)某个存储过程中先锁定表B再锁定表A这可能就会导致个死锁如果锁定顺序没有被预先详细设 计好死锁很难被发现   46、通过SQL Server Performance Monitor监视相应硬件负载 Memory: Page Faults / sec计数器如果 该值偶尔走高表明当时有线程竞争内存如果持续很高则内存可能是瓶颈 Process:   1、% DPC Time 指在范例间隔期间处理器用在缓延(DPC)接收和提供服务百分比(DPC 正在运行为比标准 间隔优先权低间隔) 由于 DPC 是以特权模式执行DPC 时间百分比为特权时间 百分比部分这些时间单独计算并 且不属于间隔计算总数部 分这个总数显示了作为例子时间百分比平均忙时   2、%Processor Time计数器 如果该参数值持续超过95%表明瓶颈是CPU可以考虑增加个处理器或换个 更快处理器   3、% Privileged Time 指非闲置处理器时间用于特权模式百分比(特权模式是为操作系统组件和操纵硬件 驱动而种处理模式它允许直接访问硬件和所有内存另种模式为用户模式它是种为应用、环境分系统和整数 分系统设计种有限处理模式操作系统将应用线程转换成特权模式以访问操作系统服务) 特权时间 % 包括为间断 和 DPC 提供服务时间特权时间比率高可能是由于失败设备产生大数量间隔而引起这个计数器将平均忙时作为样 本时间部分显示   4、% User Time表示耗费CPU数据库操作如排序执行aggregate functions等如果该值很高可考虑增加索 引尽量使用简单表联接水平分割大表格等思路方法来降低该值 Physical Disk: Curretn Disk Queue Length计 数器该值应不超过磁盘数1.5~2倍要提高性能可增加磁盘 SQLServer:Cache Hit Ratio计数器该值越高越好如果 持续低于80%应考虑增加内存 注意该参数值是从SQL Server启动后就直累加记数所以运行经过段时间后该值将 不能反映系统当前值   47、分析select emp_name form employee where salary > 3000 在此语句中若salary是Float类型则优化器对其进行优化为Convert(float,3000)3000是个整数我们应在编 程时使用3000.0而不要等运行时让DBMS进行转化同样和整型数据转换   48、查询关联同写顺序 select a.personMemberID, * from chineseresume a,personmember b where personMemberID = b.referenceid and a.personMemberID = 'JCNPRH39681' (A = B ,B = ‘号码') select a.personMemberID, * from chineseresume a,personmember b where a.personMemberID = b.referenceid and a.personMemberID = 'JCNPRH39681' and b.referenceid = 'JCNPRH39681' (A = B ,B = ‘号码' A = ‘号码') select a.personMemberID, * from chineseresume a,personmember b where b.referenceid = 'JCNPRH39681' and a.personMemberID = 'JCNPRH39681' (B = ‘号码' A = ‘号码') TAG: SQL sql 查询 2009-9-8 23:00:58 疯狂代码 http://www.crazycoder.cn/
/
本文档为【查询慢的原因】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索