MySQL索引面試
MySQL索引的基礎和類型服務器
索引的基礎:索引相似於書籍的目錄,要想找到一本書的某個特定篇章,須要查找書的目錄,定位對應的頁碼性能
存儲引擎使用相似的方式進行數據查詢,先去索引當中找到對應的值,而後根據匹配的索引找到對應的數據行。排序
索引對性能的影響索引
大大減小服務器須要掃描的數據量字符串
幫助服務器避免排序和臨時表效率
將隨機I/O變爲順序I/O基礎
大大提升查詢速度,下降寫的速度,佔用磁盤書籍
索引的使用場景數據類型
對於很是小的表,大部分狀況下全表掃描效率更高
中到大型表,索引很是有效
特大型的表,創建和使用索引的代價將隨之增加,可使用分區技術來解決
索引類型
索引有不少種類型,都是實現賊存儲引擎層的
普通索引:最基本的索引,沒有任何約束限制
惟一索引:與普通索引相似,但具備惟一性約束
主鍵索引:特殊的惟一索引,不容許有空值
面試考點:惟一索引和主鍵索引的區別?
一個表只能有一個主鍵索引,能夠有多個惟一索引
主鍵索引必定是惟一索引,惟一索引不是主鍵索引
主鍵能夠與外鍵構成參照完整性約束,防止數據不一致
組合索引:將多個列組合在一塊兒建立索引,能夠覆蓋多個列
外鍵索引:只有InnoDB類型的表纔可使用外鍵索引,保證數據的一致性,完整性和實現級聯操做
全文索引:MySQL自帶的全文索引只能用於MyISAM存儲引擎,而且只能對英文進行全文檢索。
MySQL索引的建立原則
一、最適合索引的列是出如今WHERE子句中的列,或鏈接字句中的列而不是出如今SELECT關鍵字後的列
二、索引列的基數越大,索引的效果越好
三、對字符串進行索引,應該制定一個前綴長度,能夠節省大量的索引空間
四、根據狀況建立複合索引,複合索引能夠提升查詢效率
五、避免建立過多索引,索引會額外佔用磁盤空間,下降寫操做效率
六、主鍵儘量選擇較短的數據類型,能夠有效減小索引的磁盤佔用,提升查詢效率
MySQL索引的注意事項
一、複合索引遵循前綴原則
二、like查詢,%不能在前,可使用全文索引
三、column is null 可使用索引
四、若是MySQL估計使用索引比全表掃描更慢,會放棄使用索引
五、若是or前的條件中的列有索引,後面的沒有,索引都不會被用到
六、列類型是字符串,查詢時必定要給值加引號,不然索引失效