mysql最大的一个特色是处理和存储分离,而索引是在存储层实现的,不一样的索引因为其实现的方式不一样,适应于不一样的业务处理。mysql
1.B-tree索引,是最多见的一种索引结构(B-tree数据结构网上有不少资料介绍),B-tree索引的索引列是顺序组织存储介质的,因此很适合查找范围数据;
2.hash索引,基于hash表实现,只有精确匹配索引的全部列的查询才有效,对于每一行数据,存储引擎会对全部的索引列计算一个哈希码,哈希码是一个较小的值,不一样的索引列值计算出来的哈希码也不一样,哈希索引将全部的哈希码存储在索引介质中,同时在哈希表中保存指向每一个数据行的指针,因此查找速度特别快;
3.全文索引是一种特殊类型的索引,它查找的是文本中的关键词,而不是比较索引中的值;sql
索引的优势:
1.索引大大减小了服务器须要扫描的数据量;
2.索引能够帮助服务器避免排序和临时表;
3.索引能够将随机I/0变为顺序I/O;
三星索引
1.查询对应的索引行相邻或靠的比较近,则得到一星,这减小了索引片的宽度;
2.索引中的数据顺序和查询的排列顺序一致,则得到一星,这减小了没必要要的排序;
3.索引中的列包含了查询中须要的所有列,则得到一星,这避免了表访问,仅经过索引便可获的全部的数据;
索引是最好的解决方案吗?
1.对于很是小的表,大部分状况下全表扫描是更高效的解决方案;
2.对于中到大型表,索引比较高效;
3.对于特大型表,创建和使用索引的代价随数据量增加服务器