Mysql索引

索引

索引创建一般用于较多的搜索或排序建立,建立索引会降低插入的速度。

1.B+树索引

1.1聚簇索引/聚集索引

将表的主键永磊构造一棵B+树,并且将整张表的杭机路数据存放在该B+树的叶子节点中。
没有定义主键会不会有索引?会有rowid

1.2辅助索引/二级索引

一个索引就是一个B+树,定义4个索引+默认索引就是5个索引
二级索引存放索引列,还包含一个书签,书签中存放主键
Mysql索引_第1张图片

回表

通过辅助索引获得主键后再通过主键索引获取完整记录就叫回表。
如果做sql优化就避免回表。

1.3联合索引/复合索引

将表上的多个列组合起来进行索引。

2.哈希索引

mysql 自动检测查询热词,进行哈希索引。

3.全文索引

MySQL在高并发连接、数据库记录数较多的情况下,SELECT … WHERE … LIKE '%…%'的全文搜索方式不仅效率差,而且以通配符%和_开头作查询时,使用不到索引,需要全表扫描,对数据库的压力也很大。MySQL针对这一问题提供了一种全文索引解决方案,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜索),而且实现了更高质量的搜索。但是,至今为止,MySQL对中文全文索引无法正确支持。

4.高性能索引创建策略

4.1那个字段值得创建策略

重复率

select count(distinct name)/count(*) from person;
查看字段重复率,越高则可以创建索引

前缀索引

针对blob、text、很长的varchar字段,mysql不支持索引他们的全部长度,需要建立前缀索引
语法:Alter table tableName add key/index(column(x))
缺点:无法应用于order by 和group by ,也无法做覆盖索引。
select count(distinct left(okrder_note,3)) /count(*) AS sel3 from person
在这里插入图片描述
听过得出的离散型查看得出sel13,sel14,sel15三个适合做前缀索引
Mysql索引_第2张图片

后缀索引

mysql 不支持后缀索引。可以通过表中添加一个新列,进行倒排序获取后缀索引。

多列索引
  • 将选择性最高的列放到索引最前列
  • 根据那些运行频率最高的查询来调整索引列的顺序
  • 优化性能时,需要使用相同的列但顺序不同的索引来满足不同类型的查询
三星索引

对于一个查询而言,三星索引可能是其最好的索引。满足以下条件

  • 索引将相关的记录放到一起获得一星
  • 如果索引中的数据顺序和查找顺序的排列一致获得二星(排序星)
  • 如果索引中的列包含了查询中需要的全部列则获得三星(宽索引星-不需要回表)
    索引的宽度越窄越好,

你可能感兴趣的:(mysql,数据库,sql)