mysql 索引举例(MySQL 各个索引的使用详解)
mysql 索引举例
MySQL 各个索引的使用详解一. 慢查询日志
1.1 MySQL的日志类型
日志用于记录数据库的运行情况,以及用户对数据库执行的各类操作。当数据库发生故障时,可以根据日志分析和解决问题,从而对数据库进行恢复。
1.2 认识慢查询日志
慢查询日志用于记录MySQL数据库中响应时间超过指定阈值的语句。慢查询日志通常也被称之为慢日志,因为它不仅仅只针对SELECT
语句,像INSERT、UPDATE、DELETE
等语句,只要响应时间超过所设定阈值都会记录在慢查询日志中。
1.3 如何开启慢查询日志命令
慢查询日志可以通过命令临时设置,也可以修改配置文件永久设置。
查看是否开启慢查询日志
|
show variables like 'slow%' ; |
临时开启慢查询日志
|
set slow_query_log= 'ON' ; set long_query_time=1; |
慢查询日志文件所在位置
|
show variables like '%datadir%' ; |
二. 查询分析器——EXPLAIN
2.1 explain简介
explain命令可以查看SQL语句的执行计划。当explain与SQL语句一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理语句,包括有关如何联接表以及以何种顺序联接表的信息。
explain能做什么?
- 分析出表的读取顺序
- 数据读取操作的操作类型
- 哪些索引可以使用
- 哪些索引被实际使用
- 表之间的引用
- 每张表有多少行被优化器查询
2.2 explain的使用
explain的使用很简单,只需要在SQL语句之前加上explain
命令即可,除select
语句外,explain也能分析insert、update和delete
语句。
命令解释:
三. 索引的基本使用
3.1 什么是索引
索引是一种特殊的数据结构,类似于图书的目录,它能够极大地提升数据库的查询效率。如果没有索引,在查询数据时必须扫描表中的所有记录才能找出符合条件的记录,这种全表扫描的查询效率非常低。
总结:提高查询效率,就好像垃圾分类一样,把一样效果的东西放在一起,找的时候好找。
3.2 常见的索引种类
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定记录。
数据库的索引好比一本书的目录,能够加快数据库的查询速度;索引是快速搜索的关键,如果不加索引,查找任何一条特定的数据都会进行一次全表扫描。
3.3 索引的使用
创建索引
创建普通索引
|
CREATE INDEX indexName ON tableName(columnName(length)); |
创建唯一索引
|
CREATE UNIQUE INDEX indexName ON tableName(columnName(length)); |
创建复合索引
|
CREATE INDEX indexName ON tableName(columnName1, columnName2, …); |
删除索引
|
DROP INDEX [indexName] ON tableName; |
查看索引
|
SHOW INDEX FROM tableName; |
3.4 索引的实战经验
四. 复合索引前导列特性
复合索引前导列特性:在MySQL中,如果创建了复合索引(name, salary, dept)
,就相当于创建了 (name, salary, dept)、(name, salary)和(name) 三个索引,因此在创建复合索引时应该将最常用作查询条件的列放在最左边,依次递减。
列:
未使用索引
|
select * from employee where salary=8800; select * from employee where dept= '部门A' ; select * from employee where salary=8800 and dept= '部门A' ; |
使用索引:前面都带有name
|
select * from employee where name = 'liufeng' ; select * from employee where name = 'liufeng' and salary=8800; select * from employee where name = 'liufeng' and salary=8800 and dept= '部门A' ; |
五. 覆盖索引
5.1 什么是覆盖索引
覆盖索引又称之为索引覆盖,即select
的数据列只从索引中就能得到,不必读取数据行,也就是只需扫描索引就可以得到查询结果。
关于覆盖索引的几点说明:
- 使用覆盖索引,只需要从索引中就能检索到需要的数据,而不要再扫描数据表;
- 索引的体量往往要比数据表小很多,因此只读取索引速度会非常快,也会极大减少数据访问量;
- MySQL的查询优化器会在执行查询前判断,是否有一个索引可以覆盖所有的查询列;
- 并非所有类型的索引都可以作为覆盖索引,覆盖索引必须要存储索引列的值。像哈希索引、空间索引、全
- 文索引等并不会真正存储索引列的值。
5.2 如何判断使用了覆盖索引
当一个查询使用了覆盖索引,在查询分析器EXPLAIN
的Extra列可以看到“Using index”
。
到此这篇关于MySQL 各个索引的使用详解的文章就介绍到这了,更多相关MySQL 索引使用内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
本人博客:https://blog.csdn.net/weixin_46654114
原文链接:https://chenyunzhi.blog.csdn.net/article/details/109257969
- mysql explain的用法
- mysql实验总结分析(MySQL查询截取的深入分析)
- mysql索引详解及基本用法(Mysql普通索引与唯一索引的选择详析)
- mysql是自动commit吗(详解MySQL与Spring的自动提交autocommit)
- mysql中查询数据合并(Mysql合并结果接横向拼接字段的实现步骤)
- centos系统mysql安装及连接教程(CentOS8安装SQLServer2019的过程)
- 怎么用docker中的mysql连接数据库(解决Docker之mysql容器数据库更改不生效的问题)
- mysql错误代码之1064的解决方案(mysql错误代码之1064的解决方案)
- mysql日常运维(MySQL从库维护经验分享)
- mysql添加数据很慢(mysql如何优化插入记录速度)
- mysqldecimal类型数据转换(mysql decimal数据类型转换的实现)
- mysql删除表数据的语句(Mysql实现定时清空一张表的旧数据并保留几条数据推荐)
- mysql连接数与缓存(Mysql连接数设置和获取的方法)
- mysql数据库简单优化(MySQL数据类型优化原则)
- navicat连接mysql报1045(解决Navicat for MySQL 连接 MySQL 报2005错误的问题)
- python与mysql的联系(MySQL和Python交互的示例)
- 律界衣品最好,时尚圈学识数高,41岁的Amal堪称现实版的傲骨贤妻(时尚圈学识数高)
- 刘智泰确认出演《Good Wife》 担纲男一号(刘智泰确认出演Good)
- 《傲骨之战》剧终 律政女魔头Diane,为什么是大女主天花板(傲骨之战剧终律政女魔头Diane)
- 汉族(汉族的祖先是谁)
- 中国有几个名族(中国有几个民族没列入56个民族)
- 数学语文题目(语文的数学题)
热门推荐
- javascript五大继承方式(原生Javascript实现继承方式及其优缺点详解)
- angular快速创建模块指令(详解Angular项目中共享模块的实现)
- dede织梦管理后台密码忘记了(织梦DEDE后台更新了广告而前台没有变化的解决办法)
- VS中打开.ashx文件
- apache错误编码代码(关于Apache默认编码错误 导致网站乱码的解决方案)
- java入坑rabbitmq(Python操作rabbitMQ的示例代码)
- php商城支付接口(php实现银联商务公众号+服务窗支付的示例代码)
- win7iis搭建web服务器(如何搭建云服务器之IIS的配置)
- thinkphp5配置入口路径(ThinkPHP5.1框架数据库链接和增删改查操作示例)
- wampserver开发环境介绍(WampServer下如何配置多域名)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9