天天看點

Mysql索引靈魂拷問

1、你能說說什麼是索引嗎?

索引是為了加速對表中資料行的檢索而建立的一種分散的存儲結構。索引是針對表而建立的,它是由資料頁面以外的索引頁面組成的,每個索引頁面中的行都會含有邏輯指針,以便加速檢索實體資料。

2、索引具體采用的哪種資料結構呢?

(不同索引資料結構不同)

3、B數和B+樹的差別?

4、InnoDB使用的B+ Tree的索引模型,那麼你知道為什麼采用B+ 樹嗎?這和Hash索引比較起來有什麼優缺點嗎?

(B+ Tree索引和Hash索引差別 哈希索引适合等值查詢,但是不無法進行範圍查詢 哈希索引沒辦法利用索引完成排序 哈希索引不支援多列聯合索引的最左比對規則 如果有大量重複鍵值得情況下,哈希索引的效率會很低,因為存在哈希碰撞問題)

5、你知道B+ Tree的葉子節點都可以存哪些東西嗎?

(B+ Tree的葉子節點存儲了整行資料的是主鍵索引,也被稱之為聚簇索引。而索引B+ Tree的葉子節點存儲了主鍵的值的是非主鍵索引,也被稱之為非聚簇索引。)

6、聚簇索引和非聚簇索引,在查詢資料的時候有差別嗎?

7、為什麼聚簇索引查詢會更快?

8、在建立索引的時候都會考慮哪些因素呢?

9、建立聯合索引的時候,需要做聯合索引多個字段之間順序你們是如何選擇的呢?

(最左字首比對問題)

10、聯合索引的最左比對原則的成因?

11、你知道在MySQL 5.6中,對索引做了哪些優化嗎?

12、如何定位并優化慢查詢sql?