SQL语句优化 -- 以Mysql为例
本文参考下面的文章:
2: Mysql语句的执行过程
3: sql优化的几种方法
我将 sql语句优化分为三个方面,(此处不包括 业务逻辑的优化 和 缓存的使用 ) : 索引优化 ; 关键字的使用 ; 有效的规避 .
1: 索引的优化 可以分为 索引命中无效 的 优化 和 索引命中低效 的 优化 ;
1) : 索引命中无效的情况:
a : 如果是单列索引的话;最好不要出现null ; 据说是允许为null的话,可能会得到不符合预期的结果集;
b: 索引前导模糊 如: like"%xx";
c: 负向条件查询 无法使用索引: 优化策略: 将负向条件优化为 in 查询 ; 负向条件有: != , <> , not in , not exists , not like ;
d: 索引列 参与 计算 ;
e: 索引列 做强制转换处理 ;
2) : 索引命中低效的情况:
a : 从效率上将: union > in > or ; 建议用 in ;
b : 联合索引最左前缀原则 ;
c: 对于 order by 要利用索引的有效性:
2: 关键字的使用:
a : 用 exists 优化 in ; (呃 , 这里我有个小疑问 , 上面说 将负面向条件查询 优化成 in 以及 将 union , or 也优化成 in ; 这里说 用 exists 来优化 in ; 那么问题来了, 要不要 将上面用到in的地方 也使用 exists 优化一下呢? )

b : 用 instr() 函数 优化 like ;
instr(a , b ) > 0 <==> 从 a列中 查找 like("%b%") ;
instr(a , b ) = 0 <==> 从 a列中 查找 not like("%b%") ;
instr(a , b ) = 1 <==> 从 a列中 查找 like("b%") ;

c : 超过三个表最好不要 join。
需要 join 的字段,数据类型必须一致,多表关联查询时,保证被关联的字段需要有索引
3 : 有效的规避 :
a: * 的使用;
尽量使用所有的列名,而不是* ;
b: union 与 union all
如果确定 使用 union 也不会产生 重复的记录 ; 那就使用 union ; union 效率要高于 union all
c: 如果明确知道只有一条结果返回,limit 1 能够提高效率。

d: 使用延迟关联

e: 尽量使用数字型字段:

SQL语句优化 -- 以Mysql为例的更多相关文章
- SQL语句优化、mysql不走索引的原因、数据库索引的设计原则
SQL语句优化 1 企业SQL优化思路 1.把一个大的不使用索引的SQL语句按照功能进行拆分 2.长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引. 3.对SQL语句功能的拆 ...
- mysql优化之SQL语句优化
Mysql优化是一个老生常谈的问题, 优化的方向也优化很多:从架构层;从设计层;从存储层;从SQL语句层; 今天讲解一下从SQL语句层: 这个部分是程序员最容易把控的地方,也是最容易忽视的地方. 一个 ...
- MySQL常用SQL语句优化
推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...
- 浅谈mysql配置优化和sql语句优化【转】
做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...
- MySQL基础操作&&常用的SQL技巧&&SQL语句优化
基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t ...
- 重新学习MySQL数据库12:从实践sql语句优化开始
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/79394168 本文不堆叠网上海量的sql优化技巧或 ...
- mysql的sql语句优化方法面试题总结
mysql的sql语句优化方法面试题总结 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结 ...
- php面试专题---MySQL常用SQL语句优化
php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...
- MySQL之SQL语句优化
语句优化 即优化器利用自身的优化器来对我们写的SQL进行优化,然后再将其放入InnoDB引擎中执行. 条件简化 移除不必要的括号 select * from x where ((a = 5)); 上面 ...
随机推荐
- MongoDB在Windows下的环境配置和使用
总是觉得配置环境是一个超级麻烦的事情啊,而且网上说的又比较乱,配置完后又没有说怎么开始运行,在哪输入增删改查语句,像突然断层一样.所以就在这里详细说说. 一:下载安装 1.去官网的下载页面 2.下载完 ...
- Angular-cli新建项目目录结构详解
Angular-cli新建项目目录结构详解 在上一篇博客中我们已经通过Angular CLI命令行工具创建出来一个全新的Angular项目,要想写项目,首先我们要先搞清楚项目的目录结构是怎样的,每个文 ...
- 【原】Coursera—Andrew Ng机器学习—Week 4 习题—Neural Networks 神经网络
[1] Answer:C [2] Answer:D 第二层要输出四个元素a1 a2 a3 a4.输入x有两个,加一个x0是三个.所以是4 * 3 [3] Answer:C [4] Answer:C [ ...
- sublime添加右键菜单
参考:https://www.zhihu.com/question/29662273/answer/45277925 @echo Off :START CLS echo *============== ...
- as+bt=1是ab两数互质的充要条件
[as+bt=1是ab两数互质的充要条件] 充分性,as+bt=1 => (a,b)=1: 因为as+bt=1,设c=(a,b),则c整除a和b,所以c整除as+bt,即c整除1,所以c=1,即 ...
- 【bzoj1016】[JSOI2008]最小生成树计数
1016: [JSOI2008]最小生成树计数 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4863 Solved: 1973[Submit][St ...
- Java “hello word” 第一天
//新建包和类 //java是包,c#是命名空间package test1;/** * 需求:练习一个hello word * 思路: * 1.定义一个类,因为java程序都是以类的形式存在的,类的形 ...
- 面试题:SpringMVC的工作流程
SpringMVC是当今最主流的Web MVC框架,没有之一,要做一名合格的JavaWeb工程师,学好它势在必行! 与Struts2原理不同,SpringMVC是通过最基础最传统的servlet来实现 ...
- linux Shell中常用的条件判断
linux Shell中常用的条件判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d ...
- Luogu 3241 [HNOI2015]开店
BZOJ 4012权限题 浙科协的网突然炸了,好慌…… 据说正解是动态点分治,然而我并不会,我选择树链剖分 + 主席树维护. 设$dis_i$表示$i$到$root(1)$的值,那么对于一个询问$u$ ...