索引可以極大的提公升mysql的資料檢索速度,類似於書籍的目錄,可以根據目錄的章節標題快速定位到書中的內容。但索引在提高查詢速度的同時需要額外的儲存成本和維護成本,會降低對錶更新操作的速率。
1.1 普通索引
最基本的索引型別,基於普通字段建立的索引,沒有任何限制。
1.2 唯一索引
在普通索引
的基礎上,要求字段值必須唯一,但允許null
值
1.3 主鍵索引
特殊的唯一索引
,不允許null
值且乙個表只能有乙個主鍵
1.4 復合索引(組合索引)
在多個列上建立索引稱為符合索引。復合索引可以代替多個單一索引,相比多個單一索引復合索引所需的開銷更小。
1.5 全文索引
應用於大量的文字檢索,速度優於like模糊查詢
基本語法
# 方法一:建立表時
create
table 表名 (
欄位名1 資料型別 [完整性約束條件…]
, 欄位名2 資料型別 [完整性約束條件…],[
unique
| fulltext | spatial ]
index
|key
[索引名]
(欄位名[
(長度)][
asc|
desc])
);# 方法二:create在已存在的表上建立索引
create
[unique
| fulltext | spatial ]
index 索引名
on 表名 (欄位名[
(長度)][
asc|
desc])
;# 方法三:alter table在已存在的表上建立索引
alter
table 表名 add
[unique
| fulltext | spatial ]
index
索引名 (欄位名[
(長度)][
asc|
desc])
;# 刪除索引:drop index 索引名 on 表名字;
索引是儲存引擎用於快速查詢記錄的一種資料結果,是物理資料頁儲存,在資料檔案中,利用資料頁儲存;索引可以加快檢索速度,同時也會降低增刪改操作速度,需要額外的維護代價。
hash和btree
儲存引擎
是否支援事物
鎖級別b+tree
hash
full-text
innodb
是行級鎖是否
是myisam
否表級鎖是否
是ndb
是行級鎖否是
是3.1 explain 命令
-- 使用
type:儲存引擎查詢資料採用的方式
possible_keys: 查詢是可能用到的索引,並不一定會真正使用
key:查詢是真正用到的索引名稱
rows: mysql查詢優化器會根據統計資訊,估算sql要查詢到結果需要掃瞄多少行記錄。原則上rows是越少效率越高,可以直觀的了解到sql效率高低
key_len: 表示查詢使用了索引的位元組數量。可以判斷是否全部使用了組合索引。
3.2 回表查詢、覆蓋索引
在innodb中索引分為聚簇索引和輔助索引,聚簇索引的葉子結點儲存行記錄,輔助索引葉子結點儲存的是聚簇索引值和索引字段值。
通過索引值查詢無法直接定位整條記錄,如查詢的字段資訊中包含除索引字段之外的其他字段,就需要先通過輔助索引定位聚簇索引,再通過聚簇索引定位具體行記錄,這個過程稱為回表查詢。當索引中包含查詢的所有字段,此時則不需要回表,因為輔助索引中包含了所需的字段值,直接在索引中讀取字段值即可,這類查詢過程稱為覆蓋索引。
innodb中規定了每一張表必須有乙個聚簇索引,聚簇索引規則如下:
3.3 最左字首原則
最左字首原則是基於復合索引,在乙個復合索引中,如查詢中使用到最左邊的列,那麼查詢就會使用到復合索引,否則索引將失效。
原理:索引都是有序數列,如建立符合索引(name,age,***),那麼在索引結構中,會先對name進行排序,接著age最後***。如果從第二個索引開始查的話,索引無法進行工作。
4.1 開啟慢查詢日誌
-- 檢視慢查詢日誌是否開啟
show variables like
'slow_query_log%'
-- 通過一下命令開啟慢查詢日誌
setglobal slow_query_log =on;
setglobal slow_query_log_file =
'oak-slow.log'
;set
global log_queries_not_using_indexes =on;
set long_query_time =10;
-- 慢查詢閥值,單位秒
4.1 查詢優化
參考:
MySQL聚集索引詳解 mysql 索引詳解
直接起飛 1.什麼是索引?索引是幫助mysql高效獲取資料的排好序的資料結構。2.索引的資料結構?為什麼選這種結構?假設我們現在這裡有一張表 以下情況都是innodb儲存引擎 idnumber 如果mysql沒有索引這種結構,那麼我們如果查詢number為51的這行記錄,那麼mysql就要從上往下掃...
MySQL聚集索引詳解 mysql索引詳解
資料結構分,有b tree索引 b tree 雜湊索引 r tree索引等。按資料塊的順序和索引節點的邏輯順序是否一致可以分為聚集索引和非聚集索引。聚集索引由於物理塊連續,在範圍掃瞄的時候可以減少磁頭尋道時間,因而比非聚集索引高效。幾種索引型別的選擇 primary 主鍵索引。unique 唯一索引...
mysql 索引定義 MySQL 索引詳解
普通索引 唯一索引和主索引 1.普通索引 普通索引 由關鍵字key或index定義的索引 的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件 where column 或排序條件 order by column 中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊 最緊湊的...