SQL 语句优化方法
- 尽量避免非操作符的使用,在索引上使用 NOT,<> 等操作符,数据库管理系统是不会使用索引的,可以将查询语句转化为可以使用索引的查询。
- 避免对查询的列的操作,任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数,计算表达式,查询时要尽可能将操作移至等式的右边,甚至去掉函数。
- 避免不必要的类型转化,需要注意的是,尽量避免潜在的数据类型转换。如将字符型数据与数值型数据比较,会自动将字符进行转换,从而导致全表扫描。
- 增加查询的范畴限制。避免全范围的搜索。
- 合理使用__IN__ 与__EXISTS__。例如:有A,B两个表,他们分别使用如下的情况:
- 当只显示一个表的数据如 A,关系条件只加一个ID时,使用IN更合适,SQL语句如下:
select * from A where id in (select id from B)
- 当只显示一个表的数据如 A,关系条件不只一个列,例如关系条件涉及到的列为ID,col1 时,使用IN 就不方便了,可以使用EXISTS,SQL语句如下:
select * from A where EXISTS (select 1 from B where id = A.id and col1 = A.col1)
- in 与 exists 的区别:in 是把外表和内表作hash连接,而exists 是对外表作loop 循环,每次loop循环再对内表进行查询。一直来认为exists 比in 效率高的说法是不准确的。如果查询的两个表大小相当,那么用in 和exists 差别不大。如果两个表中一个较小,一个是大表,则子查询大表用exists,子查询小表用in。
- 尽量去掉__<>__。尽量去掉<>,避免全表扫描,如果数据是枚举值,且取值范围固定,则修改OR 或者 IN a<>0 改为a>0 or a<0 a<>'' 改为a >''。
- 去掉where子句中的is null 和 is not null。where子句中的is null 和 is not null 将不会使用索引而是进行全表搜索,因此需要通过改变查询方式,分情况讨论等方法,去掉where子句中的is null 和 is not null ,is not null 改为A>0 或者 A>''。
- 尽量不要使用前导模糊查询。由于前导模糊查询(前面有%的like查询)不能利用索引,所以速度会比较慢。
- select 子句中避免使用 ' * '。当你想在select 子句中列出所有的column时,使用动态SQL列引用 ' * ' 是一个方便的方法,不幸的是,这是一个非常低效的方法。实际上,数据库在解析的过程中,会将' * ' 依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更过的时间。
- 规范所有SQL关键字的书写,比如 select,update,delete,from等,要么全部大写,要么全部小写,不要大小写混写。
SQL 语句优化方法的更多相关文章
- MySQL - SQL语句优化方法
1.使用 show status 了解各种 SQL 的执行频率 mysql> show status like 'Com%'; 该命令可以查询 sql 命令的执行次数. 2.定位执行效率较低的 ...
- SQL语句优化方法
1.1 注释使用 在语句中多写注释,注释不影响SQL语句的执行效率.增加代码的可读性. 1.2 对于事务的使用 尽量使事务处理达到最短,如果事务太长最好按功能将事务分开执行(如:可以让用户在界面上多几 ...
- SQL语句优化方法30例
1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_I ...
- SQL系列 - SQL语句优化个人总结
关于SQL语句优化方法 有些是通用的(如避免Select *): 有些不同的数据库管理系统有所区别(如Where子句顺序): 然后必须根据实际环境进行调优,因为即使是相同的数据库和表,在数据量或其他环 ...
- 优化数据库的方法及SQL语句优化的原则
优化数据库的方法: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜 ...
- mysql优化sql语句的方法
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...
- 数据库 基于索引的SQL语句优化之降龙十八掌(转)
一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言 客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...
- MySQL常用SQL语句优化
推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...
- 浅谈mysql配置优化和sql语句优化【转】
做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...
随机推荐
- url_for()中的坑,url_for操作对象是函数,而不是route里的路径
url_for操作对象是函数,而不是route里的路径. url_for操作对象是函数,而不是route里的路径. url_for操作对象是函数,而不是route里的路径.
- Django安装与开发虚拟环境搭建01
Django是一款基于python的MVT的web开发框架(m表示model,主要用于对数据库层的封装 ,v表示view,用于向用户展示结果,c表示controller,是核心,用于处理请求.获取数 ...
- IntelliJ IDEA 左侧列表设置忽略文件格式
什么问题 idea 中设置忽略文件 Unity开发过程中使用Lua做逻辑开发 Unity会自动生成xx.meta文件 这种文件再使用Idea开发过程中没有用处 显示文件列表中会看着比较乱 如何设置 F ...
- JDBC结果集rs.next()注意事项
写在前面: 用JDBC从数据库中查询数据要用到结果集ResultSet,其中我们在获取结果的时候经常用到rs.next()方法来判断是否查询到了数据. 但是要特别注意,next()方法用一次,游标就往 ...
- 小白的Python之路 day1 pyc
pyc是个什么? 1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在. ...
- 事务处理操作(COMMIT,ROLLBACK)。复制表。更新操作UPDATE实际工作中一般都会有WHERE子句,否则更新全表会影响系统性能引发死机。
更新操作时两个会话(session)同时操作同一条记录时如果没有事务处理操作(COMMIT,ROLLBACK)则会导致死锁. 复制表:此方法Oracle特有
- Node之Express服务器启动安装与配置
首先安装express-generator cnpm i -g express-generator 使用express --version查看express版本 生成express服务 express ...
- python爬去电影天堂恐怖片+游戏
1.爬去方式python+selenium 2.工作流程 selenium自动输入,自动爬取,建立文件夹,存入磁力链接到记事本 3.贴上代码 #!/usr/bin/Python# -*- coding ...
- JAVA图片批量上传JS-带预览功能
这篇文章就简单的介绍一个很好用的文件上传工具,批量带预览功能.直接贴代码吧,都有注释,很好理解. HTML页面 <!DOCTYPE html> <%@ taglib prefix=& ...
- DCL的失效:现实与初衷的背离
最近看了Brian Goetz写的一篇有关DCL的文章:Double-checked locking: Clever, but broken.( 2001年发表于JavaWorld上) 这篇文章讲述了 ...