FULLTEXT

全文索引,只有MyISAM引擎支持这种索引类型,而且只能作用在CHAR、VARCHAR ,TEXT 列上。
创建:
ALTER TABLE table ADD INDEX FULLINDEX USING FULLTEXT(cname1[,cname2…]);

使用:
SELECT * FROM table WHERE MATCH(cname1[,cname2…]) AGAINST (‘word’ MODE );

其中, MODE为搜寻方式(IN BOOLEAN MODE ,IN NATURAL LANGUAGE MODE ,IN NATURAL LANGUAGE MODE | WITH QUERY EXPANSION)。
搜寻方式注解:
布尔模式(IN BOOLEAN MODE ),允许word里含一些特殊字符用于标记一些具体的要求,如+表示一定要有,-表示一定没有,*表示通用匹配符,类似正则;
自然语言模式(IN NATURAL LANGUAGE MODE),就是简单的单词匹配;
含表达式的自然语言模式(IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION),就是先用自然语言模式处理,对返回的结果,再进行表达式匹配。

FULLTEXT索引也是按照分词原理建立索引的。西文中,分词可以很方便的按照空格进行分割。中文不能按照这种方式进行分词,要使用Mysql的中文分词插件Mysqlcft,当然还有其他的分词插件可以使用。

HASH

hash就是一种(key=>value)形式的键值对,如数学中的函数映射,允许多个key对应相同的value,但不允许一个key对应多个value。适合重复值相对较少的列,同时只能对EMORY/HEAP引擎起作用。
(1)Hash 索引仅仅能满足”=”,”IN”和”<=>”查询,不能使用范围查询。
(2)Hash 索引无法被用来避免数据的排序操作。
(3)Hash 索引不能利用部分索引键查询。也就是建立的组合索引一定要全部字段用上才起效果。
(4)Hash 索引在任何时候都不能避免表扫描。
(5)Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。

BTREE

BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中,每次查询都是从树的入口root开始,依次遍历node,获取leaf。是mysql中的默认索引类型,也是所有引擎都支持的索引类型。