Mysql建立索引的方式:fulltext,hash,btree,rtree
区别和适应场景:
Fulltext:
全文索引,只用Myisam引擎,只能在char,varcha人,和text的类型的列上使用,当数据量大的时候,我们首先创建一个没有全文索引的表导入数据,在利用create index 创建一个全文索引,要比直接创建全文索引然后导入数据要快得多;
全文索引的诞生是为了解决模糊查询效率低的;
使用方式:
创建ALTER TABLE table ADD INDEX FULLINDEX
USING FULLTEXT(cname1
[,cname2…]);
使用SELECT * FROM table WHERE MATCH(cname1[,cname2…]) AGAINST (‘word’ MODE );
Hash:
hash索引具有一次定位,不像树形索引那样查询效率低,
hash索引和tree索引的区别:
1. hash索引不支持范围查询;
2. hash索引不能利用部分索引键来查询
3. hash索引不能避免排序的操作
4. hash不能避免表扫描
Rtree
使用很少,只支持geometry数据类型,相对于Btree的优势是支持范围查找;
Btree
是一种按照算法将索引放入到树形的数据结构中,
BTREE在MyISAM里的形式和Innodb稍有不同:
在 Innodb里,有两种形态:一是primary key形态,其leaf node里存放的是数据,而且不仅存放了索引键的数据,还存放了其他字段的数据。二是secondary index,其leaf node和普通的BTREE差不多,只是还存放了指向主键的信息.
而在MyISAM里,主键和其他的并没有太大区别。不过和Innodb不太一样的地方是在MyISAM里,leaf node里存放的不是主键的信息,而是指向数据文件里的对应数据行的信息.