MySQL與PHP的基礎(chǔ)與應(yīng)用專題之索引
概述
從今天開始, 小白我將帶領(lǐng)大家一起來補(bǔ)充一下 數(shù)據(jù)庫(kù)的知識(shí).
索引
索引 (Index) 是一種特殊的數(shù)據(jù)結(jié)構(gòu), 類似于圖書的目錄. 索引能夠極大的提升數(shù)據(jù)庫(kù)的查詢效率. 如果沒有索引, 在查詢數(shù)據(jù)時(shí)必須掃描表中的說有記錄才能找出符合條件的記錄, 這種全表掃描的查詢效率非常低.
索引的種類 | 描述 |
---|---|
普通索引 | 最基本的索引, 沒有任何限制, 僅加速查詢 |
唯一索引 | 索引列的值必須唯一, 但允許有空值 |
主鍵索引 | 一種特殊的唯一索引, 不允許有空值 |
復(fù)合索引 | 兩個(gè)或多個(gè)列上的索引被稱作符合索引 |
全文索引 | 對(duì)文本內(nèi)容進(jìn)行分詞索引 |
格式:
CREATE INDEX 索引名 ON 表名(列名)
查詢分析器 EXPLAIN
EXPLAIN 命令可以查看 SQL 語(yǔ)句的執(zhí)行計(jì)劃. 當(dāng) EXPLAIN 與 SQL 語(yǔ)句一起使用時(shí), MySQL 將顯示來自優(yōu)化器的有關(guān)語(yǔ)句執(zhí)行計(jì)劃的信息. MySQL 解釋了它將如何處理語(yǔ)句, 包括有關(guān)如何連接表以及以何種順序連接表的信息.
查詢分析器的用途:
- 分析出表的讀取順序
- 數(shù)據(jù)讀取操作的操作類型
- 哪些索引可以使用
- 哪些索引被實(shí)際使用
- 表之間的引用
- 每張表有多少行被優(yōu)化器查詢
結(jié)果解析:
參數(shù) | 描述 |
---|---|
id | 執(zhí)行 SELECT 或操作表的順序 |
select_type | 查詢的類型, 如 SIMPLE, PRIMARY, SUBQUERY, DERIVED, UNION 等 |
table | 當(dāng)前行使用的表名 |
partitions | 匹配的分區(qū) |
type | 連接類型 |
possibile_keys | 可能使用的索引 |
key | 實(shí)際使用的索引, NULL 表示未使用索引 |
key_len | 查詢中使用的索引長(zhǎng)度 |
ref | 列與索引的比較 |
rows | 掃描的行數(shù) |
filtered | 選取的行數(shù)占掃描的行數(shù)的百分比 |
extra | 其他信息 |
格式:
EXPLAIN SQL 語(yǔ)句
例子:
MySQL 日志
日志 (Log) 用于記錄數(shù)據(jù)庫(kù)的運(yùn)行情況, 以及用戶對(duì)數(shù)據(jù)庫(kù)執(zhí)行的各類操作. 當(dāng)數(shù)據(jù)庫(kù)發(fā)生故障時(shí), 可以根據(jù)日志分析和解決問題, 從而對(duì)數(shù)據(jù)進(jìn)行恢復(fù).
日志 | 描述 |
---|---|
重做日志 (Redo Log) | 重做日志是一種物理格式的日志, 記錄的是物理數(shù)據(jù)頁(yè)面修改的信息 |
回滾日志 (Undo Log) | 回滾日志是一種邏輯格式的日志, 在執(zhí)行 Undo 的時(shí)候. 僅僅是將數(shù)據(jù)從邏輯上恢復(fù)至事務(wù)之前的狀態(tài) |
二進(jìn)制日志 (Bin Log) | 二進(jìn)制日志是一種邏輯格式的日志, 以二進(jìn)制文件的形式記錄了數(shù)據(jù)庫(kù)中的操作, 但不記錄查詢語(yǔ)句 |
錯(cuò)誤日志 (Error Log) | 錯(cuò)誤日志記錄著 Mysqld 啟動(dòng)和停止, 以及服務(wù)器在運(yùn)行過程中發(fā)生的錯(cuò)誤的關(guān)信息 |
慢查詢?nèi)罩?(Slow Query Log) | 慢查詢?nèi)罩居涗泩?zhí)行時(shí)間過長(zhǎng)和沒有使用索引的查詢語(yǔ)句 |
一般查詢?nèi)罩?(General Log) | 記錄了服務(wù)器收到的每一個(gè)查詢或是命令, 無論這些查詢是命令是否正確甚至是否包含語(yǔ)法錯(cuò)誤 |
中繼日志 (Relay Log) | 中級(jí)日志類似二進(jìn)制, 可用于復(fù)制架構(gòu)中, 使從服務(wù)器和主服務(wù)器的數(shù)據(jù)保持一致 |
慢查詢?nèi)罩?/h2>
慢查詢?nèi)罩居糜谟涗?MySQL 數(shù)據(jù)庫(kù)中響應(yīng)時(shí)間超過指定閾值的語(yǔ)句. 慢查詢?nèi)罩就ǔR脖环Q為慢體質(zhì), 因?yàn)槁樵儾粌H僅針對(duì) SELECT 語(yǔ)句, 像 INSERT, UPDATE, DELETE 等語(yǔ)句. 只要響應(yīng)時(shí)間超過所設(shè)定閾值都會(huì)記錄在慢查詢?nèi)罩局?
參數(shù) | 描述 |
---|---|
slow_query_log | 是否開啟慢查詢?nèi)罩? 1 表示開啟, 0 表示關(guān)閉 |
slow_query_log_file | 慢查詢?nèi)罩敬鎯?chǔ)路徑, 可選 |
long_query_time | 閾值, 當(dāng) SQL 語(yǔ)句的響應(yīng)時(shí)間超過閾值就會(huì)被記錄到日志中 |
log_queries_ not_using_indexes | 未使用索引的查詢也被記錄到慢查詢中, 可選 |
log_output | 日志存儲(chǔ)方式, 默認(rèn)為 FILE log_output=‘FILE’ 表示將日志存入文件 log_output=‘TBALE’ 表示將日志存入數(shù)據(jù)庫(kù) log_output=‘FILE, TABLE’ 表示同時(shí)將日志存入文件和數(shù)據(jù)庫(kù) |
開啟慢查詢:
set slow_query_log='ON';
set long_query_time=1;
到此這篇關(guān)于MySQL與PHP的基礎(chǔ)與應(yīng)用專題之索引的文章就介紹到這了,更多相關(guān)MySQL 索引內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)庫(kù)運(yùn)維之?dāng)?shù)據(jù)恢復(fù)的方法
本篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)運(yùn)維之?dāng)?shù)據(jù)恢復(fù)的方法,此處總結(jié)一下恢復(fù)方案,并結(jié)合數(shù)據(jù)庫(kù)的二進(jìn)制日志做下數(shù)據(jù)恢復(fù)的示范。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06MySQL從MyISAM轉(zhuǎn)換成InnoDB錯(cuò)誤與常用解決辦法
由于一些程序的要求,需要MyISAM數(shù)據(jù)引擎或InnoDB,下面是具體的解決方法,經(jīng)測(cè)試偶爾會(huì)出現(xiàn)一些問題。2011-05-05idea連接mysql數(shù)據(jù)庫(kù)失敗的幾種解決方案
我們?cè)趯W(xué)習(xí)Mybatis時(shí)需要連接Mysql數(shù)據(jù)庫(kù),使用IDEA無法連接mysql數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于idea連接mysql數(shù)據(jù)庫(kù)失敗的幾種解決方案,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06Mysql中json類型數(shù)據(jù)查詢的實(shí)現(xiàn)
MySQL5.7開始支持JSON格式的數(shù)據(jù)類型,可以存儲(chǔ)和處理JSON類型的數(shù)據(jù),本文主要介紹一些關(guān)于json數(shù)據(jù)類型的查詢操作,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10