mysql 索引中的USING BTREE有什么用


創建索引時使用的索引方式,有btree和hash兩種

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

key_part:
    col_name [(length)] [ASC | DESC]

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'

index_type:
    USING {BTREE | HASH}

algorithm_option:
    ALGORITHM [=] {DEFAULT | INPLACE | COPY}

lock_option:
    LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}

 

一些存儲引擎允許您在創建索引時指定索引類型。例如:

CREATE TABLE lookup (id INT) ENGINE = MEMORY;
CREATE INDEX id_index ON lookup (id) USING BTREE;

 

B-TREE索引的特點

B-TREEB-TREE以B+樹結構存儲數據,大大加快了數據的查詢速度
B-TREE索引在范圍查找的SQL語句中更加適合(順序存儲)
B-TREE索引使用場景

全值匹配的查詢SQL,如 where act_id= '1111_act'
聯合索引匯中匹配到最左前綴查詢,如聯合索引 KEY idx_actid_name(act_id,act_name) USING BTREE,只要條件中使用到了聯合索引的第一列,就會用到該索引,但如果查詢使用到的是聯合索引的第二列act_name,該SQL則便無法使用到該聯合索引(注:覆蓋索引除外)
匹配模糊查詢的前匹配,如where act_name like '11_act%'
匹配范圍值的SQL查詢,如where act_date > '9865123547215'(not in和<>無法使用索引)
覆蓋索引的SQL查詢,就是說select出來的字段都建立了索引

HASH索引的特點

Hash索引基於Hash表實現,只有查詢條件精確匹配Hash索引中的所有列才會用到hash索引
存儲引擎會為Hash索引中的每一列都計算hash碼,Hash索引中存儲的即hash碼,所以每次讀取都會進行兩次查詢
Hash索引無法用於排序
Hash不適用於區分度小的列上

參考:https://dev.mysql.com/doc/refman/5.7/en/create-index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM