mysql 分组占比_含泪整理MySQL索引
索引优化分析
性能下降SQL慢
查询语句写的差
索引失效
单值索引
多值索引
关联查询太多join(设计缺陷或不得已的需求)
服务器调优以及各个参数设置(缓冲、线程数等)
执行时间长
等待时间长
常见通用的JOIN查询
共有的INNER JOIN
左表的共有 LEFT JOIN
右表的共有 RIGHT JOIN
左边独有 where b.key is null
全链接 full outer join
ab都没用a.key is null or b.key is null
索引简介
是什么
排好序。
查询快。
数据库系统还维护着满足特定查找算法的数据结构。B+TREE索引(此处不展开讨论)
索引:是帮助MySQL高效获取数据的数据结构,可以得到索引的本质。索引是一种数据结构。
高效查询,类似新华字段。
排好序的快速查找数据结构。(order by …)
优势
提高索引的检索效率,降低数据库的IO成本。
通过数据进行排序,降低数据的排序成包,降低了cpu的消耗。
劣势
实际上索引也是一张表,该表保存了主键索引字段,并指向实体表的数据,占空间。
索引提高了查询,但是降低了更新。
提高效率的一个因素,如果有大数据量的表,花时间建立最优秀的索引,或者优化查询。
MySQL索引分类
单值索引
一个索引只包含单个列,一个表可以有多个单列索引。
唯一索引
索引列的值必须唯一,但允许有空值。
复合索引
一个索引包含索格列
基本语法
哪些需要创建索引
主键索引
频繁查询
外键管理
组合索引
排序字段
统计或分组
哪些情况不需要创建索引
表记录少
300百万就差不多开始优化
经常增删改的不创建索引
重复的值
MySQL索引结构
BTree索引
Hash索引
full-text全文索引
R-TREE索引
性能分析
一、MySQL常见的性能瓶颈
cpu饱和
io内存
硬件瓶颈,top,free,iostat,vmstat
是什么
模拟优化器执行的SQL查询语句,从而知道MySQL是如何处理SQL语句的,分析查询语句或者表结构。
能干什么
Explain + sql
表的读取顺序
数据读取操作的操作类型
哪些索引可以被使用
哪些哪些索引实际被使用
表之间的引用
每张表有多少行被优化器查询
二、Explain每个字段的详细描述
id
数字大的优先级高。(derived衍生)
id不同,如果是子查询,id的需要会递增,id值越大优先级越高,先被执行。
id相同,执行顺序从上往下
id相同与不同,同时存在。
select_type
有哪些?
simple
简单的select查询,查询中不包含子查询或者union
primary
查询中若包含任何复杂的子部分,最外层查询则被标记为primary
subquery
在select 或者where 列表中包含了子查询
derived(衍生)
在from列表中包含的子查询被标记为derived,MySQL会递归执行这些子查询,把结果放在临时表里。
union
若第二个select出现在union之后,则被标记为union。若union包含在from子句的子查询中,外层select被标记为derived.
union result
两个union查询的结果。
查询的类型,主要是用于区别普通查询,联合查询,子查询等复杂查询
type
类型有:all,index,arnge,ref,eq_ref,const,system,null
system
表只有一行记录,平时不会出现,忽略不计
const
一次索引,用于比较primary 或者union 索引。因为只匹配一行记录。例如将主键置于where列表,MySQL就能将该查询转换成一个常量
eq_ref
唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或者唯一索引
ref
非唯一性索引扫描,返回匹配某个单独的所有行。本质上也是一种索引访问,它返回所有匹配某个单独值的行。可能会找到多个符合条件的行,所以属于查找和扫描的混合体。
range
只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。一般就算在where语句中出现的between,<>,in,等的查询。这种范围扫描比全表扫描要好,因为它只需要开始结束于索引的两个点,不用全表索引。
index
index与all区别为Index只遍历索引树。
all
全表扫描
possible_keys
可能用到的索引。一个,多个。
不一定被实际查询引用。
key
实际使用到的索引。
查询中若使用到了全文索引
覆盖索引:查询的字段和索引字段一一对应。(查询列要被所建的索引覆盖)
key_len
索引使用的字节数。索引字段的最大可能的长度,不是实际。(越小越好)
ref
显示索引的那一列被使用。最好是常量
rows
大致读到的行数。
Extra
在没用group by 子句的情况下,基于索引优化min/max操作或者对用MyIAAM存储引擎优化count()操作,不必等到执行阶段再进行计算。查询执行计划生成阶段即完成优化。
表示使用了覆盖索引,避免了访问表的数据行。如果同时出现了using where,表明索引被用来执行索引键值的查找。如果没用同时现象using where ,表明缩影用来读取数据而非执行查询动作。
新建了内部的临时表,常见于order by 和分组查询group by
mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。mysql中无法利用索引完成的排序操作称为文件排序。(排序未命中索引)
using firesort
sql+\G
using temporary
using index(还可以哦)
using where
using join buffer:使用了连接缓存
impossible where:不能获取到任何元素
select tables optimized away
distinct:找到第一个匹配的元组后就收工。
从最好到最差system>const>eq_ref>ref>i>range>index>all
一般来说,保证查询至少达到range级别,最好能达到ref
性能分析
一、索引分析
单表索引
两张表
左链接加到右表
右链接加到左表
三张表
加到后面两张表
结论
小结果集驱动大结果集
优先优化内部循环
join buffer的设置
二、避免索引失效
全值索引最好
最左匹配法则
不在索引列上做任何操作(计算,函数,类型转换,会导致索引失效而转向全表扫描)
存储引擎不能使用索引范围条件右边的列(范围之后全失效)
尽量使用覆盖索引。不要select *
mysql在使用不等于(!=或者<>)的时候无法使用索引导致全表扫描
is null,is not null也无法使用索引(索引失效)(%加右边)
解决办法:覆盖索引。
like 以通配符开通(%aaa)索引也会失效,变成全表扫描
字符串不加单引号索引失效
少用or,用它来连接时会索引失效
我是失忆,一个热爱技术的宅男,文章有任何问题您都可以在留言中指出。欢迎留言。
mysql 分组占比_含泪整理MySQL索引相关推荐
- mysql启动日志指令_简单整理MySQL的日志操作命令
1.首先确认你日志是否启用了 ?1MySQL>show variables like'log_bin'; 如果启用了,即ON那日志文件就在MySQL的安装目录的data目录下 2.怎样知道当前的 ...
- mysql 分组查询 语句_详解MySQL中的分组查询与连接查询语句
分组查询 group bygroup by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表达 ...
- 含泪整理MySQL索引
索引优化分析 性能下降SQL慢 查询语句写的差 索引失效 单值索引 多值索引 关联查询太多join(设计缺陷或不得已的需求) 服务器调优以及各个参数设置(缓冲.线程数等) 执行时间长 等待时间长 常见 ...
- datetime类型怎么输入_精心整理MySQL基本使用(数据库的操作、数据类型、MySQL的常用命令)...
前言:瑞典 MySQL AB 公司开发,目前属于 Oracle 公司. MySQL是一种关联数据库管理系统 由于其体积小.速度快.总体拥有成本低.MySQL软件采用了双授权政策(本词条"授权 ...
- MYSQL收获及体会_我的MYSQL学习心得(一) 简单语法
语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DEFAULT关键字后面是不用加括号的 --sqlserver CREATE TABLE emp ( id INT DEFAULT ...
- 向mysql数据库发送指令_常用的MySQL数据库命令大全
飞信2017V5.6.8860.0 官方正式版 类型:聊天其它大小:69.1M语言:中文 评分:9.6 标签: 立即下载 常用的MySQL命令大全 一.连接MySQL 格式: mysql -h主机地址 ...
- mysql 常规命令操作_常见的MySQL命令大全
一.连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码1.例1:连接到本机上的MYSQL.首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot ...
- mysql 数据库命令大全_常用的MySQL数据库命令大全
飞信2017V5.6.8860.0 官方正式版 类型:聊天其它大小:69.1M语言:中文 评分:9.6 标签: 立即下载 常用的MySQL命令大全 一.连接MySQL 格式: mysql -h主机地址 ...
- mysql 慢sql分析_如何分析Mysql慢SQL
内容摘要: 开启慢查询日志捕获慢SQL 使用explain分析慢SQL 使用show profile查询SQL执行细节 常见的SQL语句优化 一.开启慢查询日志捕获慢SQL ① 查询mysql是否开启 ...
最新文章
- 前端wxml取后台js变量值_微信小程序云开发教程WXML入门数据绑定
- Python 数据科学手册 5.2 Scikit-Learn 简介
- 300WLP、AFLW2000-3D、Biwi Kinect Head Pose Database姿态数据的读取
- js函数、事件、补充知识
- 抓linux肉鸡教程视频,超简单的菜鸟网吧抓肉鸡教程
- 海康—SADP激活(设备网络搜索)
- xml python et_python xml处理
- CentOs7下Zabbix安装教程——准备工作
- 苹果ipadmini1 主板 电路图 超清
- 黑马程序员_面向对象简介
- 最小生成树-Prim + Kruskal算法
- 川大网页多媒体设计【李天翼班】资料整理
- 信而泰ALPS 用户管理——网络测试仪实操
- 只有一个源视频的Deepfakes简介
- Java笔试题(二)多选题
- python视觉识别库_机器视觉、模式识别库汇总
- python hasattr() getattr() setattr()函数的使用
- 【线段树套KD树】[BZOJ4605]崂山白花蛇草水
- ios 扇形 按钮_IOS 开发中画扇形图实例详解
- 2021级新生程序设计班级天梯赛:2-2 《肖申克的救赎》
热门文章
- 动态规划(最长递增子序列)---最长递增子序列
- MediaCodec在Android视频硬解码组件的应用
- 在微信小程序里自动获得当前手机所在的经纬度并转换成地址
- Word文档转html并提取标题
- Xamarin+vs2010部署错误:error MSB6004: 指定的任务可执行文件位置\sdk\\tools\zipalign.exe”无效...
- GIF动画,菊花动画,UIView动画,CoreAnimation动画(CALayer动画)的用法
- java概述与基础知识
- [导入]连连看.NET 1.41全部源码
- Linux系统编程之查看文件大小的方法(lseek_fseek_stat)
- Fedora设置DVD为yum源