Mysql性能优化之覆盖索引

因为我们大多数情况下使用的都是Innodb,所以这篇博客主要依据Innodb来讲

b+树(图片来自网络)

b+树图来自网络

1.聚集索引与非聚集索引区别

聚集索引:叶子节点包含完整的数据(物理地址连续),叫做聚集索引

非聚集索引(又称辅助索引):它的叶子节点并不包含行记录的全部数据,叶子结点除了包含键值以外,每个叶子结点中的索引行还包含了一个书签,该书签用来告诉存储引擎可以在哪找到相应的数据行。需要引用主索引作为data域,其实原理就是直接通过辅助索引无法找到数据,需要通过辅助索引找到主键,然后再根据主索引去查找其对应叶子节点的数据。其过程就是(辅助索引+主键+columns值)。

2.分页需要优化原因

例:select a from table where b=1

①如果b字段没有索引,则数据库会进行全表扫描,扫描所有的数据库

②如果b字段有索引,索引需要扫描3个数据块

⑴获取所有b=1的主键与其rowid

⑵再根据rowid查找数据。

⑶如果数据不在该数据块回表,如果a在索引中则不会表。

其缓慢的原因其实是因为辅助索引需要回表去根据主键再去查询。

3.分页具体实现

例:select book_name,book_info from libary limit 20000,10 (表主键为其id)

覆盖索引:包含所有满足查询需要的索引成为覆盖索引

即(id,book_name,book_info)作为组合索引,就是覆盖索引的一种体现

  

时间: 2024-11-10 14:53:29

Mysql性能优化之覆盖索引的相关文章

Mysql性能优化:为什么要用覆盖索引?

原文:Mysql性能优化:为什么要用覆盖索引? 导读 相信读者看过很多MYSQL索引优化的文章,其中有很多优化的方法,比如最佳左前缀,覆盖索引等方法,但是你真正理解为什么要使用最佳左前缀,为什么使用覆盖索引会提升查询的效率吗? 本篇文章将从MYSQL内部结构上讲一下为什么覆盖索引能够提升效率. InnoDB索引模型 在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表.又因为前面我们提到的,InnoDB使用了B+树索引模型,所以数据都是存储在B+树中的. 每一个

Mysql性能优化--索引优化 ( 索引不再是黑盒子 )

课程目录:│  ├─第1章 课程开篇│  │      1-课程开篇│  │      │  ├─第2章 InnoDB 行存储结构│  │      1-InnoDB行存储结构--本章大纲│  │      2-InnoDB行存储结构1--变长字段长度列表│  │      3-InnoDB行存储结构2--NULL值列表│  │      4-InnoDB行存储结构3--VARCHAR及行溢出│  │      │  ├─第3章 InnoDB 数据页结构│  │      1-InnoDB页存储

Mysql性能优化:如何给字符串加索引?

原文:Mysql性能优化:如何给字符串加索引? 导读 现代大部分的登录系统都支持邮箱.手机号码登录两种方式,那么如何在邮箱或者手机号码这个字符串上建立索引才能保证性能最佳呢? 今天这篇文章就来探讨一下在Mysql中如何给一个字符串加索引才能达到性能最佳. 本文首发于作者的微信公众号[码猿技术专栏],原创不易,喜欢的朋友支持一下,谢谢!!! 陈某将会从什么是前缀索引.前缀索引和普通索引的比较.如何建丽最佳性能的前缀索引.前缀索引对覆盖索引的影响这几段来讲. 前缀索引 顾名思义,对于列值较长,比如B

MySQL 性能优化---索引及优化

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一.MySQL性能优化之-影响性能的因素 1.商业需求的影响 Myisam存储引擎内置一个计数器,count(*)时直接从计数器读取:而通过innodb存储引擎查找某个数据时,是必须扫描全表的,所以当执行对表的统计(即使用count(*)函数)时,myisam要比innodb要快的很多.所以一般在innodb上执行count(*)时一般要

Mysql5.7—mysql性能优化-索引、语句、配置(运维必备)

小生博客:http://xsboke.blog.51cto.com 小生 Q Q:1770058260 -------谢谢您的参考,如有疑问,欢迎交流 一. 数据库的类型 1) 第一代数据库: 基于层次模型与网状模型的数据库 层次型数据库比较经典的是IBM公司的IMS(InformationManagement System)数据库,层次型数据库提供了良好的完整性支持,模型简单,对具有一对多层关系的部们描述非常自然.直观,容易理解,比较适用于那些实体间联系是固定的且预先定义好的环境,其性能优于关

mysql性能优化注意事项以及索引

 mysql性能优化注意事项以及索引 一:数据库的优化方面 1商业需求的影响 比如说论坛里的帖子统计,并且实时更新 从功能上来说通过命令   select  count(*) from 表名 可以得到结果,如果论坛每秒产生产生成千上万条帖子,我们没有采用myisam存储而用的是innodb存储:就算再好的设备也不可能很快的查询出来. 注:在where和count(*)使用中myisam比innodb要快的多:因为myisam内置了一个计数器,count(*)可以直接从计数器当中读取,而innod

mysql性能优化-索引与优化

http://hongge.blog.51cto.com/ 一.MySQL性能优化之-影响性能的因素 1.商业需求的影响 不合理需求造成资源投入产出比过低,这里我们就用一个看上去很简单的功能来分析一下. 需求:一个论坛帖子总量的统计,附加要求:实时更新 从功能上来看非常容易实现,执行一条SELECT COUNT(*) from 表名 的Query 就可以得到结果.但是,如果我们采用不是MyISAM 存储引擎,而是使用的Innodb 的存储引擎,那么大家可以试想一下,如果存放帖子的表中已经有上千万

Mysql性能优化:什么是索引下推?

原文:Mysql性能优化:什么是索引下推? 导读 本文章始发于本人公众号:码猿技术专栏,原创不易,谢谢关注推荐. 索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询. 在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索引检索到数据,然后返回给MySQL服务器,服务器然后判断数据是否符合条件 . 在使用ICP的情况下,如果存在某些被索引的列的判断条件时,MySQL服务器将这一部分判断条件

mysql 性能优化常见命令

mysql 性能优化常见命令: 一: 当发现mysql程序运行缓慢时,在排除sql主机问题之后,可以尝试在schema,table,和sql上进一步进行考查: 1:mysql> show full processlist; +----+------+-----------+------+---------+------+-------+-----------------------+-----------+---------------+ | Id | User | Host | db | Co