一. 慢查詢日志
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
您可能感興趣的文章:- mysql 添加索引 mysql 如何創建索引
- MySQL索引類型總結和使用技巧以及注意事項
- MySQL查看、創建和刪除索引的方法
- mysql性能優化之索引優化
- 基于mysql全文索引的深入理解
- Mysql中的Btree與Hash索引比較
- MySQL 索引分析和優化
- Mysql使用索引的正確方法及索引原理詳解