MySQL有哪些索引类型 ?

mysql中的索引类型有哪些,可以从哪些角度来看?

阅读 46.1k
评论
    5 个回答
    • 15.1k

    MySQL索引类型:
    索引是一种数据结构,可以是BTREE,RTREE,或者HASH结构.
    BTREE适合用于查找某范围内的数据,可以很快的从当前数据找到下条数据.
    RTREE常用于查询比较接近的数据.
    HASH结构则适用于随机访问的场合,查找每条数据的时间几乎相同.
    显然,若要查找某个时间段的数据,用BTREE结构要比HASH结构快得多.
    另外还有FULLTEXT(全文)和SPATIAL(空间)这两个索引类型.

    查看某个表中存在的索引类型:

    USE punbb;
    SELECT INDEX_NAME, INDEX_TYPE 
    FROM INFORMATION_SCHEMA.STATISTICS 
    WHERE TABLE_NAME='pb_posts';
    INDEX_NAME             INDEX_TYPE
    PRIMARY                BTREE
    pb_posts_topic_id_idx  BTREE
    pb_posts_multi_idx     BTREE
    pb_posts_multi_idx     BTREE
    pb_posts_posted_idx    BTREE
    注:pb_posts是InnoDB类型表,默认索引为BTREE.
    
    SELECT INDEX_NAME, INDEX_TYPE 
    FROM INFORMATION_SCHEMA.STATISTICS 
    WHERE TABLE_NAME='pb_online'
    INDEX_NAME                   INDEX_TYPE     
    pb_online_user_id_ident_idx  HASH
    pb_online_user_id_ident_idx  HASH
    pb_online_ident_idx          HASH
    pb_online_logged_idx         HASH
    注:pb_online是MEMORY类型表,默认索引为HASH.

    http://dev.mysql.com/doc/refman/5.6/en/create-index.html
    InnoDB和MyISAM支持BTREE和FULLTEXT索引 ,MEMORY支持HASH和BTREE索引.
    CREATE TABLE lookup (id INT) ENGINE = MEMORY;
    CREATE INDEX id_index ON lookup (id) USING BTREE;