MySQL使用问题_mysql的使用
MySQL常见的性能瓶颈一般都是出现在CPU和I/O上,即在数据装入内存中或磁盘上读取数据时,CPU发生了饱和或装入数据过大,内存容量不足,磁盘I/O性能被限制。这时候就要使用到Explain关键字来进行分析和调优。
- 基本使用
Explain关键字可以用来模拟优化器执行SQL查询语句,从而了解SQL语句的处理方式,来达到分析查询语句或表结构的性能瓶颈。
通过Explain可以获得
- 表的读取顺序和引用
- 数据读取操作的基本类型
- 可使用的索引以及实际使用的索引
- 优化器的查询行数
使用方法:
Explain + SQL语句
可得到的信息
- 参数意义
- id
表示select查询的序列编号,即在查询中执行select语句或操作表的顺序,查询出来的id有两种情况,可同时存在
id相同,执行顺序为从上到下
id不同,如果是子查询,id的序列号会递增,id值越大,优先级越高,越早被执行
- select_type
查询的类型,主要用于区分普通查询、联合查询、子查询等不同的查询方式,有以下几种
1. SIMPLE:简单的SELECT查询,不包含子查询或UNION
2. PRIMARY:查询中包含子查询等复杂查询时,外层查询则被标记为PRIMARY
3. SUBQUERY:在SELECT或WHERE中包含子查询
4. DERIVED:在FROM中包含了子查询
5. UNION:在关键字UNION后的查询
6. UNION RESULT:从UNION表中获得结果的查询
- table
表明数据是从那张表中查询的,关联了哪些表
- partitions
表示查找的是哪个分区的数据
- type
表示查询使用了哪种类型,具体类型有
- system:表只有一行记录,等同于系统表,这是const类型的特例,基本不会出现
- const:表示通过索引一次就找到了匹配的数据,例如通过主键匹配的条件查询
- eq_ref: 唯一性索引扫描,对每个索引键表中只有一条相对应的记录,也就是主键或唯一索引和他们对应的数据这样的情况
- ref: 非唯一性索引扫描,即索引查找出对应多个符合条件的数据
- range: 只检索给定范围的行,使用一个索引来选择行,一般是between、<、>、in等范围查询
- index: 从索引中读取全表
- all:从硬盘中读取全表,即全数据读取
查询效率:从优到劣顺序排列
- possible_keys
表示可能使用到的索引,通常如果查询的字段上有索引就会显示,虽然不一定会使用到
- key
实际使用到的索引,如果在查询中使用到了覆盖索引,则该索引会和查询的select字段重叠
- key_len
索引的长度,越短越好,该值为表计算估计出的最大长度,而不是实际使用长度
- ref
显示索引的哪一列被使用到了
- rows
预计找出匹配数据所需要读取的行数
- Extra
额外的事务,是比较重要的用于分析检索效率的信息,包含以下:
- Using filesort:MySQL使用了一个外部的索引排序:“文件排序”,表示无法使用表内的索引顺序进行读取
- Using temporary:使用了临时表,该信息通常在使用了排序或分组查询时出现,MySQL使用了临时表来存储order by和group by需要进行排序的查询结果
- Using index:在select操作中使用了覆盖索引,即只从索引中就可以获得数据,不必读取数据行。覆盖索引:是建立在原有索引基础上的新的索引。
- Using where:使用了where过滤,当同时出现Using index时,表示索引被用于读取索引键值的操作,索引键即为where的过滤条件
- using join buffer:使用了连接缓存
- impossible where:where子句的值为false,不能被用于查找数据
- select tables optimized away:表示索引在没有group by的情况下,在查询阶段就优化了cont(*)等函数操作
- distinct:优化了distinct操作,匹配到第一组所需的数据后停止查找相同数据的操作
扫码关注我的微信公众号:Java架构师进阶编程 获取最新面试题,电子书 专注分享Java技术干货,包括JVM、SpringBoot、SpringCloud、数据库、架构设计、面试题、电子书等,期待你的关注!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/180825.html原文链接:https://javaforall.cn
相关文章
- MySQL中实现时间加减操作(mysql时间加减)
- MySQL拼音查询:学习如何使用(mysql拼音查询)
- MySQL 设置字符集:解决乱码问题(mysql设定字符集)
- 查询MySQL表的大小:简单几步(mysql查询表大小)
- 备份MySQL数据库秘钥安全备份(mysql秘钥)
- 浅析FRM文件导入MySQL数据库(frm文件导入mysql)
- 使用MySQL游标处理结果集(mysql游标结果集)
- 教你如何使用MySQL建立数据库,简单易懂的语句教程(mysql建数据库语句吗)
- leave like语句的应用MySQL中CASELIKE语句的应用(mysql中case)
- MySQL数据导入导致的乱码问题(mysql数据导入乱码)
- 间使用情况 如何通过MySQL高效检测表空间使用情况(mysql 判断表空)
- MySQL BLOB操作:实现高效存储和传输(mysql blob操作)
- MySQL: 使用左连接实现数据复合查询(左连接mysql)
- C语言操作MySQL的语法指南(c 中mysql的语法)
- 来效率提升使用C语言开发的MySQL语句带来的效率大幅提升(c mysql 语句带)
- MySQL中使用HAVING的方法及作用(mysql中having的用法)
- MySQL中的错误代码1111 揭示常见SQL查询问题,详解如何避免及解决(mysql中1111)
- 解决cmd无法找到MySQL的问题(cmd无法找到mysql)
- 使用Cmd控制台输入MySQL指令(cmd如何输入mysql)
- 简单而实用的 MySQL 下载脚本(mysql下载 脚本)
- MySQL无法解析DNS地址的问题解决方法(mysql不解析dns)
- 谨慎使用MySQL事务,避免数据混乱(mysql不要乱用事物)
- 解决MySQL打开问题,教你轻松应对(mysql不能打开)
- MySQL无法保留小数位(mysql不能保存小数点)
- MySQL中不等于符号的正确使用与转译方法(mysql 不等于 转译)
- MySQL数据库不推荐使用root账户进行操作(mysql不是root)