關係型數據庫 --- 索引

索引模塊

爲什麼要使用索引?

一、快速查詢數據。有了索引可以避免全表掃描,提高查詢效率

什麼樣的信息能成爲索引?

一、主鍵、唯一鍵以及普通鍵等

索引的數據結構

一、生成索引,建立二叉查找樹進行二分查找

二、生成索引,建立B-Tree 結構進行查找

三、生成索引,建立B+-Tree 結構進行查找 (主流!!!)

四、生成索引,建立Hash 結構進行查找。

BetMap等

MySql數據庫不支持BetMap 索引

密集索引和稀疏索引的區別?

密集索引文件中的每個搜索碼值都對應一個索引值

稀疏索引文件只爲索引碼的某些值建立索引項

額外補充:

Inno DB

若一個主鍵被定義,該主鍵則作爲密集索引

若沒有主鍵被定義,則該表的第一個唯一非空索引則作爲密集索引

若不滿足以上條件,Inno DB內部會生成一個隱藏的主鍵(密集索引)

非主鍵索引存儲相關鍵位和其對應的主鍵值,包含兩次查找

衍生出來的問題,以MySQL爲例

如何定位並優化慢查詢SQL?

一、根據慢日誌定位慢查詢SQL(以下不是永久生效,永久去配置文件設置)

show variables like '%quer%';

其中

slow_query_log OFF關閉 需要打開 打開方式 set global show_query_log = on;

slow_query_log_file 日誌文件的路徑

long_query_time 是指如果這個SQL執行超過十秒鐘就會被記錄到日誌文件中去,也就是慢日誌。set global long_query_time = 1;

show status like '%slow_queries%';

slow_queries 即慢查詢的數量

二、使用explain 工具去分析SQL

用法是 explain 關鍵字 加在SQL的最前面。

all 代表全表掃描

all index 代表需要優化 

三、修改SQL或者讓SQL儘量走索引

force index () 強制走索引

聯合索引的最左匹配原則的成因?

索引是建的越多越好嗎?

數據量少的表不需要建立索引,建立會造成額外的索引開銷。

數據變更需要去維護索引,所以意味着更多的索引更多的維護成本。

意味着更多的索引需要更多的空間。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章