MySQL优化(五) SQL 语句的优化 索引、explain
一、索引
1、分类
(1)主键索引:当一张表的某个字段设置为主键时,该字段就是主键索引;
(2)唯一索引:索引列中的值必须是唯一的,但是允许为空值(可以存在多个null);
(3)普通索引:基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点;
(4)全文索引:全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,介绍了要求,说说什么是全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行,比如有"你真的是一个好人" 通过“一个好人”,可能就可以找到该条记录。
在模糊查询中使用全文索引:select * from user where match(name) against ('zhang') 格式: match(列名, ...) against ('搜索的关键字')。
全文索引中,有一个叫做停止词。因为在一个文本中,创建索引是一个无穷大的数,所以对一些常用词和字符,就不会创建索引,这些词被称为停止词。
2、查询索引
show index(es) from 表名
show keys from 表名
3、为什么建立索引之后查询速度变快?
因为索引使用了二叉树的数据结构,所以速度快;索引文件会占用磁盘空间;创建索引后进行增删改操作就会变慢,因为要重新调整二叉树;
二、索引使用的注意事项
1、在哪些列上适合添加索引?
(1)列比较频繁的作为查询条件,应该创建索引
(2)唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;
(3)更新非常频繁的字段不适合创建索引;
(4)不会出现在 WHERE 子句中字段不该创建;
2、索引的使用
(1)查询要使用索引最重要的条件是查询条件中需要使用索引;
(2)对于创建的多列索引,只要查询条件使用了索引中最左边的列,索引一般就会被使用;
(3)对于使用 like 的查询,查询如果是 '%aaa' 不会使用到索引,'aaa%' 会使用到索引。
3、不会使用索引的情况:
(1)如果条件中有 OR,即使其中有条件带索引也不会使用;
(2)对于多列索引,不是使用的最左边的列作为条件,则不会被使用;
(3)like 查询以 % 开头,不会使用索引;即在 like 查询时,查询的关键字前面不能使用% (或 _)这样的字符,如果一定前面有变化的值,则考虑全文索引。
(4)如果列类型是字符串,那一定要在条件中将数据使用引号引起来,否则不会使用索引;
(5)如果Mysql 估计使用全表扫描要比使用索引快,则不使用索引;
三、通过 explain 语句分析,mysql 如何执行你的 sql 语句
explain查询sql执行计划,各列含义:
table:表名;
type:连接的类型
-system:表只有一行
-const:主键、索引。即表最多有一个匹配;
-eq_reg:主键、索引的范围查找;
-ref:连接的查找(join)
-range:索引的范围查找;
-index:索引的扫描;
-all:全表扫描;
possible_keys:可能用到的索引;
key:实际使用的索引;
key_len:索引的长度,越短越好;
ref:索引的哪一列被使用了,常数较好;
rows:mysql认为必须检查的用来返回请求数据的行数;
extra:using filesort、using temporary(常出现在使用order by时)时需要优化。
-Using filesort 额外排序。看到这个的时候,查询就需要优化了
-Using temporary 使用了临时表。看到这个的时候,也需要优化。
MySQL优化(五) SQL 语句的优化 索引、explain的更多相关文章
- Mysql 52条SQL语句性能优化策略汇总
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应 ...
- 浅谈mysql配置优化和sql语句优化【转】
做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...
- MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化)
一.什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息. 二.索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提 ...
- mysql学习之 sql语句的技巧及优化
一.sql中使用正则表达式 select name,email from user where email Regexp "@163[.,]com$"; sql语句中使用Regex ...
- MYSQL学习笔记——sql语句优化工具
优化sql:思路: 使用explan->先查询type类型看看是all还是ref,然后判断 possible_keys (显示可能应用在这张表中的索引, 一个或多个.查询涉及到的字段是若存在索引 ...
- mysql优化和sql语句优化总结
mysql性能优化 1. EXPLAIN 你的 SELECT 查询.使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的.这可以帮你分析你的查询语句或是表结构的性能瓶颈. 2. ...
- oracle中sql语句的优化
oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info (30000条数据)D ...
- SQL语句常见优化十大案例
1.慢SQL消耗了70%~90%的数据库CPU资源: 2.SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低:3.SQL语句可以有不同的写法: 1 ...
- MySQL中的SQL的常见优化策略
MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 1 避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 ...
- 52 条 SQL 语句性能优化策略,建议收藏
本文会提到 52 条 SQL 语句性能优化策略. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行nul ...
随机推荐
- 承接AR定制AR项目外包(正规公司,内附案例)
京团队长年承接AR项目外包 咨询QQ:372900288 微信:liuxiang0884 以下是AR项目案例演示,索取更多案例请通过以上方式在线联系我们
- FPGA 主时钟约束---primary clocks
FPGA 主时钟约束---primary clocks 个人的理解,FPGA做时钟约束的主要目的是给布局布线过程一个指导意义. 注:周期的参数值为ns waveform 里面的第一个参数为波形第一个上 ...
- WPF Binding Mode,UpdateSourceTrigger
WPF 绑定模式(mode) 枚举值有5个1:OneWay(源变就更新目标属性)2:TwoWay(源变就更新目标并且目标变就更新源)3:OneTime(只根据源来设置目标,以后都不会变)4:OneWa ...
- 快速傅立叶变换(FFT)算法
已知多项式f(x)=a0+a1x+a2x2+...+am-1xm-1, g(x)=b0+b1x+b2x2+...+bn-1xn-1.利用卷积的蛮力算法,得到h(x)=f(x)g(x),这一过程的时间复 ...
- kubernetes学习笔记之十二:资源指标API及自定义指标API
第一章.前言 以前是用heapster来收集资源指标才能看,现在heapster要废弃了从1.8以后引入了资源api指标监视 资源指标:metrics-server(核心指标) 自定义指标:prome ...
- element-ui input输入框回车事件
<el-input maxlength="30" v-model="answerInput" @keyup.enter.native="addA ...
- Python高级技巧:用一行代码减少一半内存占用
我想与大家分享一些我和我的团队在一个项目中经历的一些问题.在这个项目中,我们必须要存储和处理一个相当大的动态列表.测试人员在测试过程中,抱怨内存不足.下面介绍一个简单的方法,通过添加一行代码来解决这个 ...
- spring 入门demo
相关资源 官网地址:http://projects.spring.io/spring-boot/ 创建maven项目 勾选箭头处,创建一个简单的项目 填写groupId和artifactId,点击确 ...
- 在VMware中为Redhat HAT配置本地yum源
在VMware中为Redhat HAT配置本地yum源 今天准备使用CM安装大数据环境,到需要几台机器都使用同一套yum源才可以,所以想到将Redhat镜像文件拷贝到虚拟机中,在挂起使用,最后通过ht ...
- 对象转Json时,Date类型格式化问题
object是一个对象,该对象中有一个字段为Date类型 使用JSONObject obj = JSONObject.fromObject(object);将Object转成json时 Date类型字 ...