索引(index)是幫助mysql高效獲取數據的數據結構。
下邊是自己整理的資料與自己的學習總結,,做一個匯總。
一.真的有必要使用索引嗎?
不是每一個性能問題都可以通過創建一個索引來解決;有很多其它解決性能問題的方式
a).各個應用層的緩存,
b).調優數據庫參數和緩沖區大小,
c).調優數據庫連接池大小或者線程池大小,
d).調整數據庫事務隔離級別,
f).在夜間安排批量刪除,避免不必要的鎖表,
其它等等。
二.mysql索引類型normal,unique,full text的區別
1.PRIMARY, INDEX, UNIQUE 這3種是一類
normal:表示普通索引
unique:表示唯一的,不允許重復的索引,如果該字段信息保證不會重復例如身份證號用作索引時,可設置為unique,特殊的,主鍵primary_key默認非空唯一
2.FULLTEXT 是全文索引,用于在一篇文章中,檢索文本信息的。
full text: 表示 全文搜索的索引。 FULLTEXT 用于搜索很長一篇文章的時候,效果最好。用在比較短的文本,如果就一兩行字的,普通的 INDEX 也可以。
總結,索引的類別由建立索引的字段內容特性來決定,通常normal最常見。
詳細信息參考:http://blog.sina.com.cn/s/blog_887d00920100wgf3.html
三.索引總結
為了使索引的使用效率更高,在創建索引時,必須考慮在哪些字段上創建索引和創建什么類型的索引。
本小節將向讀者介紹一些索引的設計原則。干貨呀!
1.選擇唯一性,單調性的索引
唯一性索引的值是唯一的,可以更快速的通過該索引來確定某條記錄。例如,學生表中學號是具有唯一性的字段。為該字段建立唯一性索引可以很快的確定某個學生的信息。如果使用姓名的話,可能存在同名現象,從而降低查詢速度。單調性指的是數字遞增或遞減,比如ID,這樣效率會高(7.mysql-聚簇索引之隨機主鍵的效率.note)
2.為經常需要排序、分組和聯合操作的字段建立索引
經常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作會浪費很多時間。如果為其建立索引,可以有效地避免排序操作。
3.為常作為查詢條件的字段建立索引
如果某個字段經常用來做查詢條件,那么該字段的查詢速度會影響整個表的查詢速度。因此,為這樣的字段建立索引,可以提高整個表的查詢速度。
4.限制索引的數目
索引的數目不是越多越好。每個索引都需要占用磁盤空間,索引越多,需要的磁盤空間就越大。修改表時,對索引的重構和更新很麻煩。越多的索引,會使更新表變得很浪費時間。
5.盡量使用數據量少的索引
如果索引的值很長,那么查詢的速度會受到影響。例如,對一個CHAR(100)類型的字段進行全文檢索需要的時間肯定要比對CHAR(10)類型的字段需要的時間要多。避免不了,解決方法見6.
6.盡量使用前綴來索引
如果索引字段的值很長,最好使用值的前綴來索引。例如,TEXT和BLOG類型的字段,進行全文檢索會很浪費時間。如果只檢索字段的前面的若干個字符,這樣可以提高檢索速度。
不錯的網絡文章參考 :(MySQL前綴索引和索引選擇性)http://www.cnblogs.com/gomysql/p/3628926.html
7.注意聯合索引的順序,遵循左匹特性配
在select中where條件的先后順序無所謂SQL內核會排序優化,但是建立聯合索引時就有所謂了,遵循左前綴原則。5.4 mysql-索引數據結構.note 最后結論
8.刪除不再使用或者很少使用的索引
表中的數據被大量更新,或者數據的使用方式被改變后,原有的一些索引可能不再需要。數據庫管理員應當定期找出這些索引,將它們刪除,從而減少索引對更新操作的影響
9.索引并不是越多越好,最多6個
索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,
所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數最好不要超過 6 個,若太多則應考慮一些不常使用到的列上建的索引是否有必要。
10.emun 的情況或只有個位數級別的字段,沒必要加索引
極端點的情況,90萬的數據,source只有0和1兩個值,利用索引要先讀索引文件,然后二分查找,找到對應數據的數據磁盤指針,再根據讀到的指針再讀磁盤上對應的數據數據,影響結果集45萬。這種情況,和直接全表掃描那個快顯而易見。
11.索引對group by 有效
本質也是一個排序的過程,而索引幫其實現6 mysql-索引優化策略.note 第三條
不知覺就看著這么多行了,真實一下子也記不住呀,但是仔細想想上邊的每一條,在生產運用中還真該這么注意,發現一些問題如果能注意到上邊的這么幾條,還真有些道理。所以,總結如下:
注意:選擇索引的最終目的是為了使查詢的速度變快。上面給出的原則是最基本的準則,但不能拘泥于上面的準則。
讀者要在以后的學習和工作中進行不斷的實踐。根據應用的實際情況進行分析和判斷,選擇最合適的索引方式。
以上就是Mysql-索引總結的內容,更多相關內容請關注PHP中文網(www.php.cn)!