广告
返回顶部
首页 > 资讯 > 数据库 >Mysql索引选择逻辑
  • 409
分享到

Mysql索引选择逻辑

Mysql索引选择逻辑 2015-05-26 04:05:55 409人浏览 绘本
摘要

索引选择逻辑 优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执行语句。在数据库里面,扫描行数是影响执行代价的因素之一。扫描的行数越少,意味着访问磁盘数据的次数越少,消耗的 CPU 资源越少 扫描行数是怎么判断的? Mysq

Mysql索引选择逻辑

索引选择逻辑

优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执行语句。在数据库里面,扫描行数是影响执行代价的因素之一。扫描的行数越少,意味着访问磁盘数据的次数越少,消耗的 CPU 资源越少

扫描行数是怎么判断的?

Mysql 在真正开始执行语句之前,并不能精确地知道满足这个条件的记录有多少条,而只能根据统计信息来估算记录数

这个统计信息就是索引的“区分度”。显然,一个索引上不同的值越多,这个索引的区分度就越好。而一个索引上不同的值的个数,我们称之为“基数”。也就是说,这个基数越大,索引的区分度越好

mysql 是怎样得到索引的基数的呢

采样统计的时候,InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数

而数据表是会持续更新的,索引统计信息也不会固定不变。所以,当变更的数据行数超过 1/M 的时候,会自动触发重新做一次索引统计

在 Mysql 中,有两种存储索引统计的方式,可以通过设置参数 innodb_stats_persistent 的值来选择: 设置为 on 的时候,表示统计信息会持久化存储。这时,默认的 N 是 20,M 是 10。 设置为 off 的时候,表示统计信息只存储在内存中。这时,默认的 N 是 8,M 是 16

由于是采样统计,所以不管 N 是 20 还是 8,这个基数都是很容易不准的。

其实索引统计只是一个输入,对于一个具体的语句来说,优化器还要判断,执行这个语句本身要扫描多少行

如果使用索引,每次从索引上拿到一个值,都要回到主键索引上查出整行数据,这个代价优化器也要算进去的

MySQL 选错索引,主要还是没能准确地判断出扫描行数

既然是统计信息不对,那就修正。analyze table t 命令,可以用来重新统计索引信息

索引选择异常和处理

当然,扫描行数并不是唯一的判断标准,优化器还会结合是否使用临时表、是否排序等因素进行综合判断 即使统计信息没错依然可能出现选错的情况,那我们应该如何处理呐?

第一种方法是,采用 force index 强行选择一个索引

第二种方法就是,我们可以考虑修改语句,引导 MySQL 使用我们期望的索引

第三种方法是,在有些场景下,我们可以新建一个更合适的索引,来提供给优化器做选 择,或删掉误用的索引

您可能感兴趣的文档:

--结束END--

本文标题: Mysql索引选择逻辑

本文链接: https://www.lsjlt.com/news/4003.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql索引选择逻辑
    索引选择逻辑 优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执行语句。在数据库里面,扫描行数是影响执行代价的因素之一。扫描的行数越少,意味着访问磁盘数据的次数越少,消耗的 CPU 资源越少 扫描行数是怎么判断的 MySQL...
    99+
    2015-05-26
    Mysql索引选择逻辑
  • MySQL count(*)之索引选择
    覆盖索引对于一些统计问题,如下: MySQL > show create table test1 \G *****************...
    99+
    2022-10-18
  • MySQL 独立索引和联合索引的选择
    通常会对多列索引缺乏理解,常见的错误是将很多列设置独立索引,或者是索引列使用错误的次序。我们在下一篇讨论索引列次序的问题,首先看一下多列独立索引的情况,以下面的表结构为例: CREATE TABLE test (...
    99+
    2022-06-01
    MySQL 独立索引 MySQL 联合索引
  • MySQL怎样选择合适的索引
    这篇文章主要介绍了MySQL怎样选择合适的索引,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先来看一个栗子EXPLAIN sele...
    99+
    2022-10-18
  • 选择创业你的逻辑一致吗?
    要能注意到未来在不断变化之中,所以才会不断校正路线,实现成功。 越来越多的人都在创业,他们看到的可能是一个点子变成亿万富翁的戏剧性,或者一个成功者侃侃而谈的风光。但创业注定是孤独而艰辛的旅程。在成功之前,只有质疑,...
    99+
    2022-05-11
    创业
  • CSS3中的逻辑选择器有哪些
    本篇内容介绍了“CSS3中的逻辑选择器有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在 CSS 选择...
    99+
    2022-10-19
  • mysql联合索引的选择性解析
    本篇内容介绍了“mysql联合索引的选择性解析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通过下面的实验...
    99+
    2022-10-18
  • Mysql索引选择以及优化详解
    目录索引模型 B+Tree 索引选择 索引优化 索引选择性 覆盖索引 最左前缀原则+索引下推前缀索引唯一索引索引失效总结索引模型 哈希表 适用于只有等值查询的场景,Memor...
    99+
    2022-11-12
  • MySQL 中这么多索引该怎么选择
    目录前言MySQL 单字段索引问题组合索引唯一索引和普通索引总结前言 索引的本质是存储引擎用于快速查询记录的一种数据结构。特别是数据表中数据特别多的时候,索引对于数据库的性能就愈发重...
    99+
    2022-11-13
  • MySQL 中这么多索引该怎么选择
    目录前言mysql 单字段索引问题组合索引唯一索引和普通索引总结前言 索引的本质是存储引擎用于快速查询记录的一种数据结构。特别是数据表中数据特别多的时候,索引对于数据库的性能就愈发重要。 在数据量比较大的时候,不恰当的索...
    99+
    2022-09-26
  • MySQL innodb怎么选择一个聚簇索引
    这篇文章主要介绍了MySQL innodb怎么选择一个聚簇索引,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。对于innodb,主键毫无疑问是...
    99+
    2022-10-18
  • elasticsearch索引的创建过程index create逻辑分析
    目录索引的创建过程materOperation方法实现clusterservice处理建立索引 修改配置总结索引的创建过程 从本篇开始,就进入了Index的核心代码部分。这里首先分析...
    99+
    2022-11-13
  • PHP与MySQL索引的选择与优化策略
    引言:在开发Web应用程序时,PHP与MySQL是两个重要的技术组合。而索引作为MySQL中重要的特性,对于提高数据库的查询性能至关重要。本文将介绍PHP与MySQL中索引的选择和优化策略,并提供一些具体的代码示例。一、索引的基本原理与分类...
    99+
    2023-10-21
    MySQL PHP 索引优化
  • 如何理解CSS中选择器的逻辑处理
    这篇文章给大家介绍如何理解CSS中选择器的逻辑处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在过去的很长一段时间中,我们都说 CSS 是不带有任何逻辑的,意思是在 CSS 中没有控...
    99+
    2022-10-19
  • MySQL InnoDB 存储引擎的底层逻辑架构
    目录正文内存架构1. 自适应哈希索引2. Buffer pool3. Change buffer4. Log Buffer磁盘架构1. 系统表空间2. 独立表空间3. 普通表空间4. Undo 表空间5. 临时表空间总结...
    99+
    2022-09-17
  • MySQL InnoDB 存储引擎的底层逻辑架构
    目录正文内存架构1. 自适应哈希索引2. Buffer pool3. Change buffer4. Log Buffer磁盘架构1. 系统表空间2. 独立表空间3. 普通表空间4....
    99+
    2022-11-13
  • 为什么mysql优化器选择了聚集索引
    本篇内容介绍了“为什么mysql优化器选择了聚集索引”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通过这个...
    99+
    2022-10-18
  • 详解MyBatisPlus逻辑删除与唯一索引冲突问题
    1、问题背景: 在开发中,我们经常会有逻辑删除和唯一索引同时使用的情况。但当使用mybatis plus时,如果同时使用逻辑删除和唯一索引,会报数据重复Duplicate entr...
    99+
    2022-11-11
  • MyBatis-Plus解决逻辑删除与唯一索引的问题
    目录简介问题复现建库建表代码测试解决方案方案1:将字段设置为id(推荐)方案2:将字段设置为当前时间(不推荐)简介 说明 本文用示例介绍MyBatis-Plus如何解决逻辑删除与唯一...
    99+
    2022-11-13
    MyBatis-Plus 逻辑删除 MyBatis-Plus 唯一索引
  • PHP与MySQL索引的不同类型及选择原则
    导言:在数据库查询优化中,索引是非常重要的一部分。它可以提高查询速度,减少数据库的负载,从而提升系统性能。在使用PHP连接MySQL数据库时,了解不同类型的索引及其选择原则,可以帮助我们更好地优化数据库的性能。一、MySQL索引的类型B-T...
    99+
    2023-10-21
    PHP (编程关键词: PHP) MySQL (编程关键词: MySQL) 索引 (编程关键词: 索引)
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作