不适合使用hash索引的场景
不适用于顺序查询:索引存储顺序的不是值的顺序
不支持模糊匹配
不支持范围查询
不支持部分索引列匹配查找:如A,B列索引,只查询A列索引无效
1.6空间数据索引R-Tree( Geospatial indexing )
MyISAM支持地理空间索引,可以使用任意维度组合查询,使用特有的函数访
问,常用于做地理数据存储,使用不多
InnoDB从MySQL5.7之后也开始支持
在文本中查找关键词,而不是直接比较索引中的值,类似搜索引擎
InnoDB从MySQL 5.6之后也开始支持
区别:数据和索引是否存储在一起
存放在一起:聚簇索引
不在一起:非聚簇索引
叶子节点既有索引又有数据
主键 就是聚簇索引
InnoDB(聚簇索引)
···主键 就是聚簇索引(存放的是数据)主键次序就是索引次序
···非主键索引-----二级索引:利用主键,最终找到数据(存放的是主键和索引)
**MyISAM(非聚簇索引)**两个索引里面存放的都是数据
索引
冗余和重复索引:
冗余索引:(A),(A,B)
重复索引:已经有索引,再次建立索引
索引优化策略:
1.独立地使用列:尽量避免其参与运算,独立的列指索引列不能是表达式的一部分,也不能是函数的参数,在where条件中,始终将索引列单独放在比较符号的一侧
2.左前缀索引:构建指定索引字段的左侧的字符数,要通过索引选择性来评估
索引选择性:不重复的索引值和数据表的记录总数的比值
3.多列索引:AND操作时更适合使用多列索引,而非为每个列创建单独的索引
4.选择合适的索引列顺序:无排序和分组时,将选择性最高放左侧
索引优化建议
1.只要列中含有NULL值,就最好不要在此例设置索引,复合索引如果有NULL值,此列在使用时也不会使用索引
2.尽量使用短索引,如果可以,应该制定一个前缀长度
3.对于经常在where子句使用的列,最好设置索引
4.对于有多个列where或者order by子句,应该建立复合索引
5.对于like语句,以%或者‘-’开头的不会使用索引,以%结尾会使用索