mysql的索引和执行计划
一、mysql的索引
索引是帮助mysql高效获取数据的数据结构。本质:索引是数据结构
1:索引分类
普通索引:一个索引只包含单个列,一个表可以有多个单列索引。
唯一索引:索引列的值必须唯一 ,但允许有空值。
复合索引:一个索引包含多个列。
聚集索引:并不是一种单独的索引类型,而是一种数据存储方式。innodb磁盘存储,.ibd数据和索引放在一个文件夹下。
非聚集索引:不是聚集索引的,就是非聚集索引。
2:语法
查看索引 show index from table;
创建索引
create [unique] index indexname on table(columnname(length));
alter table 表名 add [unique] index [indexname] on (columnname(length));
删除索引 drop index [indexName] on table;
3:适合建索引
某一列相对来说唯一
经常用来查询显示的列
经常用来关联的列 where 条件中用到的列,以及join on 用到的列
二、mysql的执行计划
使用explan关键字可以知道mysql是如何处理SQL语句的。
id:相同,都不相同,不全部相同。
相同:获取select的执行顺序。执行顺序由上到下。
都不相同:如果是子查询,id序号会递增,id值越大优先级越高,越先被执行。
不全部相同:id相同的认为一组,从上往下顺序执行。在所有组中,id值越大,优先级越高,越先被执行。
select_type:查询的类型
simple:简单的SQL语句,不包含union或者子查询。
primary:查询中包含任何的子查询,最外层查询被标记。
subquery:在select和where中,查询的任何子查询。
derived:在from列表中包含子查询会被标记为derived,mysql会递归执行这些子查询,把结果放到临时表。
union:若第二个select出现在union之后,则标记为UNION;若UNION包含在from子句的子查询中,外层select将被标记为derived。
union result:从union表获取结果的select。
table:查询来自那张表
type:访问的类型,重要的一个指标,结果从最好到最坏。
system》const》eq_ref>ref>range>index>all,最好达到ref或者range
system:表中只有一条记录(等于系统表),这是const类型的特例,平时不会出现,这个可以忽略不计。
const:表示通过索引一次就找到了。用于primary或unique索引。因为只匹配一行数据。
eq_ref:唯一索引扫描,对于每个索引建,表中只有一条记录匹配。常见于主键或唯一索引扫描。
ref:非唯一索引扫描,返回匹配某个单独值的所有行。
rang:只检索给定范围内的行,使用一个索引来选择行。key列显示使用那个索引,一般就是在你的where语句中出现between、<、>、in查询中。
index:当查询的结果全为索引列的时候。也是全表扫描的一种。只不过扫描的全部索引。
all:全表扫描。
注:当出现index和all的时候,就应该去优化SQL语句。
key:实际所用的索引。如果为null,则没有使用索引。
possible_key:可能用到的key。possible_key有数据,但是不一定会使用key。key有数据,但是不一定会使用possible_key。这两者比一定都同时出现。
key_len:表示索引使用的字节数,通过该列查询使用索引的长度。在不损失精确性的情况下,长度越短越好。
ref:显示索引的哪一列被使用了,如果可能得话,是一个常数。
rows:根据表的以及索引选用的情况,大致估算出需要读取的行数。扫描的行数越少越好。
extra:包含不适合在其他列中显示,但重要的额外信息。
转载于:https://www.cnblogs.com/orange-time/p/10595619.html
mysql的索引和执行计划相关推荐
- MySQL 的索引、执行计划、优化器算法
SQL处理流程 INDEX 索引 索引介绍 索引:是排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称为键key,索引通过存储引擎实现: 索引相当于一本书的目录,可以优化查询. 优点: 索引 ...
- MySQL之索引,执行计划及SQL优化
1.1 索引的分类 从功能逻辑上说,分为普通索引,唯一索引,主键索引,全文索引 从物理实现方式上说,分为聚簇索引,非聚簇索引(2级索引) 从字段个数上来说,分为分为单列索引,联合索引 1.2 适合创建 ...
- mysql索引创建规则、联合与一般索引、执行计划、索引选择,索引重建与下推
数据库索引怎么建,什么时候用到 索引优缺点:为主键外建where子句建立索引可以加速数据库查询,但是索引占用内存,同时update和insert的时候需要同步修改;索引的实现通常使用其变种B+树. 建 ...
- MySQL优化篇:执行计划explain中key_len计算方式
概述 key_len表示索引使用的字节数,根据这个值可以判断索引的使用情况,特别是在使用联合索引的时候,判断该索引有多少部分被使用到非常重要. key_len的长度计算公式很重要(key_len越小, ...
- 九、索引与执行计划、索引的分类
索引与执行计划 索引入门 生活中的索引 MySql 中的索引 谈下 B+Tree 二分查找 二叉树(Binary Tree) 平衡二叉树(AVL-树) 平衡二叉树的遍历 平衡二叉树的旋转 B+树 B+ ...
- Mysql 慢查询 Sql执行计划 SQL每阶段的耗时
文章目录 前言 一.慢查询的相关参数 slow_query_log 是否开启了慢查询 开启慢查询 slow_query_log_file 指定慢查询日志的存储路径及文件 long_query_time ...
- MySQL慢查询与执行计划分析
MySQL慢查询与执行计划分析 慢查询分析 执行计划分析 表结构分析 慢查询分析 查看是否开启慢日志: show variables like 'slow_query_log%'; +-------- ...
- mysql 配置执行计划_MySQL深入学习(二)--配置、索引、执行计划
MySQL 一.MySQL 5.7 初始化配置 1.初始化数据并配置 # 1.初始化数据 /usr/local/mysql/bin/mysqld --initialize-insecure --use ...
- mysql执行计划中性能最差的是_面试中:mysql性能调优-执行计划explain
mysql的sql调优大家都不陌生,可是调优前都会先看下执行计划,这个是必须的. 插播图片: explain 这个是关键字执行如下: explain select * from user 结果如下: ...
最新文章
- 何为Java 中的多态?
- java方法未定义类型_java - 方法未定义为类 - SO中文参考 - www.soinside.com
- 数据库mongodb和mysql对比
- IO-BufferedInputStream
- Ajax Toolkit 控件学习系列(5) ——CalendarExtender使用
- Apache FOP与Eclipse和OSGi的集成
- Windows上的svn仓库迁移(visualSVN)
- php当前页面删除处理,php删除记录同时刷新当前页面的实现代码
- iPhone屏幕分辨率开发尺寸
- python批量修改文件名加后缀_python文件操作之批量修改文件后缀名的方法
- 前端,你需要掌握的重点!!
- 自动设置为兼容模式html,什么是兼容模式?
- 查询名字重复但不是相同的人的记录
- 搭建内网BT服务器(转)
- 分析锂电池充放电保护电路的特点及工作原理
- close 和 shutdown
- Python3运行web.py测试,出现RuntimeError: generator raised StopIteration异常
- 网络广告CPC、CPM和CTR的定义和关系
- linux echo 时间
- 今日简报 每日精选12条新闻简报 每天一分钟 知晓天下事 4月23日
热门文章
- 吴恩达机器学习ex7:K-means分类
- JS使用技巧2——momentjs太重了吗?试试dayjs和miment吧
- c++注释快捷键_JAVA编程中你一定要掌握的“快捷键”
- 单元格填充为0的html,Excel如何在数据信息表中把空单元格填写为数字“0”
- centos php open_basedir,CentOS 5服务器安全基本设置
- 生成全1矩阵_2020美赛A题(1)-图像处理
- 去除List集合中的重复元素,并保持原有数据的初始顺序
- XP计算机里改单核,XP中多核处理器只显示单核
- mysql sql 多选项_Mysql-Sqlalchemy-多表操作
- android控件字体,android 设置控件的颜色字体的方法