MySQL-索引有哪幾種

MySQL裏的索引類型主要有以下幾種。

1. B-Tree索引

最常見的索引類型,基於B-Tree數據結構。B-Tree的基本思想是,所有值(被索引的列)都是排過序的,每個葉節點到跟節點距離相等。所以B-Tree適合用來查找某一範圍內的數據,而且可以直接支持數據排序(ORDER BY)。但是當索引多列時,列的順序特別重要,需要格外注意。InnoDB和MyISAM都支持B-Tree索引。InnoDB用的是一個變種B+Tree,而MyISAM爲了節省空間對索引進行了壓縮,從而犧牲了性能。

2. Hash索引

基於hash表。所以這種索引只支持精確查找,不支持範圍查找,不支持排序。這意味着範圍查找或ORDER BY都要依賴server層的額外工作。目前只有Memory引擎支持顯式的hash索引(但是它的hash是nonunique的,衝突太多時也會影響查找性能)。Memory引擎默認的索引類型即是Hash索引,雖然它也支持B-Tree索引。

例子:

CREATE TABLE testhash (
    fname VARCHAR(50) NOT NULL,
    lname VARCHAR(50) NOT NULL,
    KEY USING HASH(fname)
) ENGINE =MEMORY;

3. Spatial (R-Tree)(空間)索引

只有MyISAM引擎支持,並且支持的不好。可以忽略。

4. Full-text索引

主要用來查找文本中的關鍵字,而不是直接與索引中的值相比較。Full-text索引跟其它索引大不相同,它更像是一個搜索引擎,而不是簡單的WHERE語句的參數匹配。你可以對某列分別進行full-text索引和B-Tree索引,兩者互不衝突。Full-text索引配合MATCH AGAINST操作使用,而不是一般的WHERE語句加LIKE。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章