一、索引使用

  1. MySQL索引
  2. B-Tree索引

一般來說,MySQL中的B-Tree索引的物理文件大多都是以二叉樹的結構來存儲的,也就是所有實際需要的數據都存放於樹的葉子節點,而且到任何一個葉子節點的最短路徑的長度都是完全相同的。

3.R-Tree索引

RTREE在mysql很少使用,支持該類型的存儲引擎只有MyISAM、BDb、InnoDb、NDb、Archive幾種。相對於BTREE,RTREE的優勢在於範圍查找.

4.Hash索引

Hash索引在MySQL中使用的並不是很多,目前主要是Memory存儲引擎使用,而且在Memory存儲引擎中將Hash索引作為默認的索引類型。所謂Hash索引,實際上就是通過一定的Hash演算法,將需要索引的鍵值進行Hash運算,然後將得到的Hash值存入一個Hash表中。然後每次需要檢索的時候,都會將檢索條件進行相同演算法的Hash運算,然後再和Hash表中的Hash值進行比較並得出相應的信息。

  • Hash索引僅僅只能滿足「=」,「IN」和「<=>」查詢,不能使用範圍查詢;
  • Hash索引無法被利用來避免數據的排序操作;
  • Hash索引不能利用部分索引鍵查詢;
  • Hash索引在任何時候都不能避免表掃面;
  • Hash索引遇到大量Hash值相等的情況後性能並不一定就會比B-Tree索引高;

5.Full-text索引

Full-text索引也就是我們常說的全文索引,目前在MySQL中僅有MyISAM存儲引擎支持,而且也並不是所有的數據類型都支持全文索引。目前來說,僅有CHAR,VARCHAR和TEXT這三種數據類型的列可以建Full-text索引。

6.創建索引

是否需要創建索引,幾點原則:

  • 較頻繁的作為查詢條件的欄位應該創建索引;
  • 唯一性太差的欄位不適合單獨創建索引,即使頻繁作為查詢條件;
  • 更新非常頻繁的欄位不適合創建索引;
  • 不會出現在WHERE子句中的欄位不該創建索引;

索引能夠極大的提高數據檢索效率,也能夠改善排序分組操作的性能,但是我們不能忽略的一個問題就是索引是完全獨立於基礎數據之外的一部分數據,更新數據會帶來的IO量和調整索引所致的計算量的資源消耗。

7.使用索引

(1)使用聯合索引的查詢

MySQL可以為多個欄位創建索引,一個索引可以包括16個欄位。對於聯合索引,只有查詢條件中使用了這些欄位中第一個欄位時,索引才會生效。

(2)使用OR關鍵字的查詢

查詢語句的查詢條件中只有OR關鍵字,且OR前後的兩個條件中的列都是索引時,索引才會生效,否則,索引不生效。

推薦閱讀:

相关文章