MySQL與PHP的基礎與應用專題之索引
概述
從今天開始, 小白我將帶領大家一起來補充一下 數(shù)據(jù)庫的知識.

索引
索引 (Index) 是一種特殊的數(shù)據(jù)結(jié)構, 類似于圖書的目錄. 索引能夠極大的提升數(shù)據(jù)庫的查詢效率. 如果沒有索引, 在查詢數(shù)據(jù)時必須掃描表中的說有記錄才能找出符合條件的記錄, 這種全表掃描的查詢效率非常低.
| 索引的種類 | 描述 |
|---|---|
| 普通索引 | 最基本的索引, 沒有任何限制, 僅加速查詢 |
| 唯一索引 | 索引列的值必須唯一, 但允許有空值 |
| 主鍵索引 | 一種特殊的唯一索引, 不允許有空值 |
| 復合索引 | 兩個或多個列上的索引被稱作符合索引 |
| 全文索引 | 對文本內(nèi)容進行分詞索引 |
格式:
CREATE INDEX 索引名 ON 表名(列名)
查詢分析器 EXPLAIN
EXPLAIN 命令可以查看 SQL 語句的執(zhí)行計劃. 當 EXPLAIN 與 SQL 語句一起使用時, MySQL 將顯示來自優(yōu)化器的有關語句執(zhí)行計劃的信息. MySQL 解釋了它將如何處理語句, 包括有關如何連接表以及以何種順序連接表的信息.
查詢分析器的用途:
- 分析出表的讀取順序
- 數(shù)據(jù)讀取操作的操作類型
- 哪些索引可以使用
- 哪些索引被實際使用
- 表之間的引用
- 每張表有多少行被優(yōu)化器查詢
結(jié)果解析:
| 參數(shù) | 描述 |
|---|---|
| id | 執(zhí)行 SELECT 或操作表的順序 |
| select_type | 查詢的類型, 如 SIMPLE, PRIMARY, SUBQUERY, DERIVED, UNION 等 |
| table | 當前行使用的表名 |
| partitions | 匹配的分區(qū) |
| type | 連接類型 |
| possibile_keys | 可能使用的索引 |
| key | 實際使用的索引, NULL 表示未使用索引 |
| key_len | 查詢中使用的索引長度 |
| ref | 列與索引的比較 |
| rows | 掃描的行數(shù) |
| filtered | 選取的行數(shù)占掃描的行數(shù)的百分比 |
| extra | 其他信息 |
格式:
EXPLAIN SQL 語句
例子:

MySQL 日志
日志 (Log) 用于記錄數(shù)據(jù)庫的運行情況, 以及用戶對數(shù)據(jù)庫執(zhí)行的各類操作. 當數(shù)據(jù)庫發(fā)生故障時, 可以根據(jù)日志分析和解決問題, 從而對數(shù)據(jù)進行恢復.
| 日志 | 描述 |
|---|---|
| 重做日志 (Redo Log) | 重做日志是一種物理格式的日志, 記錄的是物理數(shù)據(jù)頁面修改的信息 |
| 回滾日志 (Undo Log) | 回滾日志是一種邏輯格式的日志, 在執(zhí)行 Undo 的時候. 僅僅是將數(shù)據(jù)從邏輯上恢復至事務之前的狀態(tài) |
| 二進制日志 (Bin Log) | 二進制日志是一種邏輯格式的日志, 以二進制文件的形式記錄了數(shù)據(jù)庫中的操作, 但不記錄查詢語句 |
| 錯誤日志 (Error Log) | 錯誤日志記錄著 Mysqld 啟動和停止, 以及服務器在運行過程中發(fā)生的錯誤的關信息 |
| 慢查詢?nèi)罩?(Slow Query Log) | 慢查詢?nèi)罩居涗泩?zhí)行時間過長和沒有使用索引的查詢語句 |
| 一般查詢?nèi)罩?(General Log) | 記錄了服務器收到的每一個查詢或是命令, 無論這些查詢是命令是否正確甚至是否包含語法錯誤 |
| 中繼日志 (Relay Log) | 中級日志類似二進制, 可用于復制架構中, 使從服務器和主服務器的數(shù)據(jù)保持一致 |
慢查詢?nèi)罩?/h2>
慢查詢?nèi)罩居糜谟涗?MySQL 數(shù)據(jù)庫中響應時間超過指定閾值的語句. 慢查詢?nèi)罩就ǔR脖环Q為慢體質(zhì), 因為慢查詢不僅僅針對 SELECT 語句, 像 INSERT, UPDATE, DELETE 等語句. 只要響應時間超過所設定閾值都會記錄在慢查詢?nèi)罩局?
| 參數(shù) | 描述 |
|---|---|
| slow_query_log | 是否開啟慢查詢?nèi)罩? 1 表示開啟, 0 表示關閉 |
| slow_query_log_file | 慢查詢?nèi)罩敬鎯β窂? 可選 |
| long_query_time | 閾值, 當 SQL 語句的響應時間超過閾值就會被記錄到日志中 |
| log_queries_ not_using_indexes | 未使用索引的查詢也被記錄到慢查詢中, 可選 |
| log_output | 日志存儲方式, 默認為 FILE log_output=‘FILE’ 表示將日志存入文件 log_output=‘TBALE’ 表示將日志存入數(shù)據(jù)庫 log_output=‘FILE, TABLE’ 表示同時將日志存入文件和數(shù)據(jù)庫 |
開啟慢查詢:
set slow_query_log='ON';
set long_query_time=1;

到此這篇關于MySQL與PHP的基礎與應用專題之索引的文章就介紹到這了,更多相關MySQL 索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL安裝與創(chuàng)建用戶操作(新手入門指南)
這篇文章主要為大家介紹了MySQL安裝與創(chuàng)建用戶的使用講解是非常適合小白新手的入門學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
Window 下安裝Mysql5.7.17 及設置編碼為utf8的方法
這篇文章主要介紹了Window 下安裝Mysql5.7.17 及設置編碼為utf8的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03
mysql從4.1版開始支持子查詢功能,在此版本前,可以用join寫連表查詢來進行替代,但不推薦這么寫,相當?shù)穆闊?/div> 2014-04-04
Docker搭建MySQL并掛載數(shù)據(jù)的全過程
環(huán)境搭建費時費力,但要必不可少,這篇文章主要給大家介紹了關于Docker搭建MySQL并掛載數(shù)據(jù)的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-01-01
win11系統(tǒng)下mysql8.4更改數(shù)據(jù)目錄問題解決
更改數(shù)據(jù)庫目錄是指修改MySQL數(shù)據(jù)庫的存儲路徑,本文主要介紹了win11系統(tǒng)下mysql8.4更改數(shù)據(jù)目錄問題解決,具有一定的參考價值,感興趣的可以了解一下2024-07-07
解決MySQL啟動常見錯誤:ERROR 2002(HY000) Can‘t connect
這篇文章主要介紹了解決MySQL啟動常見錯誤:ERROR 2002(HY000) Can‘t connect to local MySQL server through socket‘tmp問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04最新評論

