sql语句的效率

1、尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。

2、尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。

3、注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。

4、不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

    例如:在报关单表头上ENTRY_ID有索引。SELECT * FROM ENTRY_HEAD WHERE  LEFT(ENTRY_ID,2)=’01’改为SELECT * FROM ENTRY_HEAD WHERE ENTRY_ID LIKE ‘01%’性能会比较高。

5、尽量使用exists代替selectcount(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。

6、尽量使用“>=”,不要使用“>”。

7、注意一些or子句和union子句之间的替换

例如下面的查询:

SELECT * FROM orders WHERE (customer_num=104 AND order_num>1001) OR order_num=1008

虽然在customer_num和order_num上建有索引,但是语句还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的集合,所以应该改为如下语句:

SELECT * FROM orders WHERE customer_num=104 AND order_num>1001

UNION

SELECT * FROM orders WHERE order_num=1008

这样就能利用索引路径处理查询。

8、注意表之间连接的数据类型,避免不同类型数据之间的连接。

9、注意存储过程中参数和数据类型的关系。

10、注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。

11、索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。

12、尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过indexindex_name来强制指定索引

13、避免对大表查询时进行tablescan,必要时考虑新建索引。

14、在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。

15、尽量避免使用distinct、orderby、groupby、having、join、cumpute,因为这些语句会加重tempdb的负担。

16、在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替createtable,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先createtable,然后insert。

17、如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。

18、如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncatetable,然后droptable,这样可以避免系统表的较长时间锁定。

19、避免相关子查询

一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。

20、避免困难的正规表达式

MATCHES和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”

即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT * FROM customer WHERE zipcode >“98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。

另外,还要避免非开始的子串。例如语句:SELECT * FROM customer WHERE zipcode[2,3] >“80”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。

转载于:https://www.cnblogs.com/evangel/archive/2009/03/14/1411772.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php跳转分站,PHP判断IP并转跳到相应城市分站的方法

本文实例讲述了PHP判断IP并转跳到相应城市分站的方法。分享给大家供大家参考。具体实现方法如下:class QQWry{var $StartIP0;var $EndIP0;var $Country;var $Local;var $CountryFlag0;// 标识 Country位置// 0x01,随后3字节为Country偏移,没有Local// 0x02,随后3字节…

SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式。 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板类,JdbcTemplate提供的方法进行增删改查的操作。 首先需要在pom文件中添加依赖:…

[html] webSocket怎么做兼容处理?

[html] webSocket怎么做兼容处理? Socket.IO:Adobe Flash Socket(缺点:需要在服务器上打开一个额外的端口,默认为10843)Ajax long pollingAjax multipart streamingForever iframeJSONP polling个人简介 我是歌谣&am…

农民第六次拯救中国

农民第六次拯救中国 英国《金融时报》中文网专栏作家吴晓波 2008-11-18 1989年,我第一次行走中国。在此之前,我是一个成长在江南城市里的文学青年,我只读到过课本上的中国,在用5个月时间踏遍南部中国之后,我在社会底层…

java base64转bitmap,如何将Bitmap位图与base64字符串相互转换

先引用delphi自带的单元uses EncdDecd;然后就可以使用下面二个函数了:///将Bitmap位图转化为base64字符串function BitmapToString(img:TBitmap):string ;varms:TMemoryStream;ss:TStringStream;s:string;beginms : TMemoryStream.Create;img.SaveToStream(ms);ss : TStringStr…

剑指offer——用两个栈实现队列

题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 解题思路: 当stack2不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出。当stack2为空时,我们把stack1中的元素…

[html] 解释下什么是ISISO8859-2字符集?

[html] 解释下什么是ISISO8859-2字符集? 这个知识点在非科班的来看算是比较偏门的了。 查了一下才知道,原来是Ascll扩展部分的字符集。ISO/IEC 8859-1,又称Latin-1或“西欧语言”,ISO/IEC 8859-2 Latin-2或“中欧语言”&#xff…

常系数线性递推的第n项及前n项和(转载)

(一)Fibonacci数列f[n]f[n-1]f[n-2],f[1]f[2]1的第n项的快速求法(不考虑高精度). 解法: 考虑12的矩阵【f[n-2],f[n-1]】。根据fibonacci数列的递推关系,我们希望通过乘以一个22的矩阵,得到矩阵【…

Processes

转载于:https://www.cnblogs.com/EMH899/p/10844709.html

linux java 进程jvm 挂起,【jvm】jconsole远程linux上的java进程

1、启动java进程的命令在启动命令中添加如下信息-Djava.rmi.server.hostname192.169.1.71 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port10099 -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse说明-Djava.r…

[html] 说说video标签中预加载视频用到的属性是什么?

[html] 说说video标签中预加载视频用到的属性是什么? 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

CodeSmith 5.0工具实例篇系列4——根据表生成修改的存储过程,针对MS Sqlserver

运行该模板时,只需要选择单个表即可。 申明:该系列案例已通过CodeSmith Professional 5.0.1 Revision 4983版本的测试,以及生成的存储过程是针对MS Sqlserver。 操作说明 :运行CodeSmith Studio工具 ,创建Blank Templa…

[html] HTML5中新添加的表单属性有哪些?

[html] HTML5中新添加的表单属性有哪些? 用的最多的就是一个 placeholder 属性了,其他的基本都不知道,借机学习下 HTML5 表单属性,学完之后感觉我们很多自定义表单可以不用做了,直接用原生的就好。如:list…

差分放大电路单端输出和双端输出区别以及应用(转载)

来自:http://www.elecfans.com/news/dianzi/20171118581901_a.html 什么是差分放大电路 差分放大电路利用电路参数的对称性和负反馈作用,有效地稳定静态工作点,以放大差模信号抑制共模信号为显著特征,广泛应用于直接耦合电路和测量…

php 识别语种,HYPHP增加多国语言支持 PHP通过用户浏览器判断来源国家方案

PHP可以通过获取浏览器发送的 ACCEPT_LANGUAGE去检测语言$_SERVER[HTTP_ACCEPT_LANGUAGE] 得到的值为 zh-CN,zh;q0.8zh-CN 我们只需要获取这段 后面的是, zh是中华的意思;q是页面权重的意思我们通过正则将 zh-CN获取出来if(!isset($_SERVER[HTTP_ACCEPT_LANGUAGE])) $_SERVER[…

[html] 给“测试投影”几个字添加立体投影的效果

[html] 给“测试投影”几个字添加立体投影的效果 text-shadow个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

python实现归并排序

# 将递归分解列表,直至最小(即每个列表仅有一个元素) # 将列表分解最小之后,递归合并两个列表,即挨个比较两个列表中最前面的元素,谁较小就将谁加入新的列表,而后该列表的下标后移一位&#xff…

php curl获取登陆cookie,PHP curl 模拟登陆 获取cookie

PHP curl 模拟登陆 获取cookie求助菜鸟学习使用PHP curl模拟登陆,等陆weiphon论坛时用以下代码成功,登陆www.xiaomi.com就死活成功不了,求助啊。窃以为是cookie获取有问题。麻烦牛人帮忙解决一下。苦思无所得夜不能寐啊!$cookie_f…

Flash 缓存问题的解决(转)

Flash 缓存问题的解决 作者:wangwaizi 时间: 2003-12-27 文档类型:翻译 来自:蓝色理想 原文是Flash支持中心的两篇文章.解决Flash缓存问题 | 解决载入变量缓存问题 使用以下的方法,使SWF文件强制不从浏览器读本地…

[html] html5中的meta标签robots有什么作用?

[html] html5中的meta标签robots有什么作用? 禁止搜索引擎对本页面内容进行收录,不会出现在SRP页面上个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关…