欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据库索引总结

程序员文章站 2022-05-13 12:09:59
高强度训练第十九天总结: 为什么要用索引 通过创建唯一性索引可以保证数据库表中每一行数据的唯一性 可以大大加快数据的检索速度(大大减少了检索的数据量),这也是创建索引最主要的原因。 帮助服务器避免排序和临时表 将随机IO变为顺序IO 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意 ......

高强度训练第十九天总结:

为什么要用索引

  • 通过创建唯一性索引可以保证数据库表中每一行数据的唯一性
  • 可以大大加快数据的检索速度(大大减少了检索的数据量),这也是创建索引最主要的原因。
  • 帮助服务器避免排序和临时表
  • 将随机io变为顺序io
  • 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

索引这么多优点,为什么不对表中的每一个列创建一个索引呢?

  • 当表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据维护的速度。
  • 索引修啊占物理空间,除了数据表占数据空间之外,每一个索引还需要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
  • 创建索引和维护索引需要耗费时间,这种时间随着数据量的增加而增加。

索引是如何提高查询速度的?

  • 将无序的数据变成相对有序的数据(就像查目录一样)

使用索引的注意事项

  • 在经常需要搜索的列上,可以加快搜索的速度
  • 在经常使用where子句的列上面创建索引,加快条件的判断速度。
  • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询的时间
  • 对于中到大型表索引都是非常有效的,但是特大型表的话维护开销会很大,不适合建索引
  • 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度
  • 避免where子句中对字段施加函数,这会造成无法命中索引
  • 在使用innodb时使用与业务无关的自增主键为主键,即使用逻辑主键,而不要使用业务主键。
  • 将打算加索引的列设置为not null,否则将导致引擎放弃使用索引而进行全表扫描
  • 删除长期未使用的索引,不用的索引的存在会造成不必要的性能损耗mysql5.7可以通过查询sys库中的chema_unused_indexes视图来查询哪些索引从未被使用
  • 在使用limit offset 查询缓慢时,可以借助索引来提高性能。

mysql 索引主要使用的俩种数据结构

  • 哈希索引 对于哈希索引来说,底层的数据结构就是hash表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景建议选择btree索引。
  • btree索引 mysql的btree索引使用的时b树中的b+tree,但是对于主要的俩种存储索引myisam和innodb的实现方式是不同的

myisam和innodb实现索引方式的区别

  • myisam:b+tree叶结点的data域存放的是数据记录的地址。在索引检索的时候,首先按照b+treee搜索算法搜索索引,如果指定的key存在,则取出其data域值,然后以data域的值为地址读取相应的数据记录。这被称为“非聚簇索引”

  • innodb:其数据文件本身就是索引文件。相比myisam,索引文件和数据文件是分离的,其表数据文件本身就是按b+tree组织的一个索引结构,树的叶结点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此innodb表数据库文件本身就是主索引。被称为聚簇索引。