索引在數據庫中是很重要的一個點,很重要,很重要,很重要!重要的事情說三遍!
1、什麼是索引
MySQL官方都索引的定義爲:索引(Index)是幫助MySQL高效獲取數據的數據結構。
一句話來解釋:索引是數據結構。
2、索引的分類
- 主鍵索引(PRIMARY KEY)
唯一的標識,主鍵不可重複,只能有一個列作爲主鍵。
- 唯一索引(UNIQUE KEY)
避免重複的列出現,唯一索引可以重複,多個列都可以標識爲 唯一索引。
- 常規索引(KEY / INDEX)
默認的,index,key關鍵字來設置。
- 全文索引(FULLText)
快速定位數據。
3、Mysql如何爲表字段添加索引?
1.添加PRIMARY KEY(主鍵索引)
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引)
ALTER TABLE `table_name` ADD UNIQUE ( `column` )
3.添加INDEX(普通索引)
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引)
ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.添加多列索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
4、最左前綴原則
MySQL中的索引可以以一定順序引用多列,這種索引叫作聯合索引。如User表的name和city加聯合索引就是(name,city),而最左前綴原則指的是,如果查詢的時候查詢條件精確匹配索引的左邊連續一列或幾列,則此列就可以被用到。如下:
select * from user where name=xx and city=xx ; //可以命中索引
select * from user where name=xx ; // 可以命中索引
select * from user where city=xx ; // 無法命中索引
這裏需要注意的是,查詢的時候如果兩個條件都用上了,但是順序不同,如 city= xx and name =xx
,那麼現在的查詢引擎會自動優化爲匹配聯合索引的順序,這樣是能夠命中索引的。
由於最左前綴原則,在創建聯合索引時,索引字段的順序需要考慮字段值去重之後的個數,較多的放前面。ORDER BY子句也遵循此規則。