高性能Mysql第三版(第五章创建高性能索引)

本文介绍了MySQL中的索引优化策略,包括如何选择合适的主键类型、避免使用随机性高的聚簇索引,以及如何利用覆盖索引来提升查询性能。通过这些优化措施,可以显著降低I/O消耗,提高数据库系统的整体效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql中索引结构图

根据索引的结构提出的一些索引优化:

1、如果正在使用InnoDB并且没有什么数据需要聚集,那么可以定义一个代理键(surrogate key)作为作为主键,这种主键的数据应该和应用无关,最简单的方法是使用AUTO_INCREMENT自增列。这样可以保证数据行是按顺序写入的,对于根据主键做关联操作的性能也会更好。

2、避免随机的(不连续且值的分布范围非常大)聚簇索引,特别是对于I/O密集型的应用,例如,从性能的角度考虑,使用UUID作为举措索引则会很糟糕,踏实的聚簇索引的插入变得完全随机,磁盘访问效率低,提高的I/O的次数。




但是并不是所有时候顺序索引都一定是好的

    



查询时候更加高效的利用索引

   覆盖索引

    通常大家都会根据查询的where条件来创建合适的索引,不过这只是索引优化的一方面。设计优秀的索引应该考虑整个查询,而不是淡淡是where条件部分。索引确实是一种查找数据高效的方式,但是mysql也可以用使用索引来直接获取列的数据,那么还有什么必要在回表查询呢?

如果一个索引包含(或者说覆盖)所有需要查询的字段的值,我们就称之为“索引覆盖”。

   百度解释

理解方式一:就是 select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖。
理解方式二:索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引 叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了(或覆盖了)满足查询结果的数据就叫做覆盖索引。 [1]  
理解方式三:是非聚集复合 索引的一种形式,它包括在查询里的Select、Join和Where子句用到的所有列(即建索引的字段正好是覆盖查询条件中所涉及的字段,也即,索引包含了查询正在查找的数据)。

作用:
  提高查询效率,减少直接的取行数据而是通过索引直接找到一个列的数据,减少IO。
  http://baike.baidu.com/link?url=xV3ymvny3OtoYJqOGcXTWkOAC9kdl1QHyjzjp43Ob9AWUwis_bftyTkq7nAsZ_V5r-n4DrmQ7cnEGN5LyBtcNa









 



5创建高性能索引-总结








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值