MySQL45讲之优化器选错索引 – flowers[通俗易懂]

MySQL45讲之优化器选错索引 – flowers[通俗易懂]本文简要介绍优化器选择索引的依据有哪些,有什么办法人为引导优化器选择更优的执行方案。

MySQL45讲之优化器选错索引 - flowers

前言

本文简要介绍优化器选择索引的依据有哪些,有什么办法人为引导优化器选择更优的执行方案。

为什么会出现选错索引

可能是统计索引基数信息错误,导致优化器错选索引,也可能是MySQLbug

选择依据

优化器选择索引的依据有扫描行记录数、回表次数、是否创建临时表和是否排序。

索引扫描行数。通过取样的方式统计索引列上不同的值数量,取N张数据页,统计页面上不同值的数量,然后估算总的不同数量(基数cardinality),这也称之为索引的“区分度”。可以通过SHOW INDEX FROM table_name来查看每个索引的基数。

对于这条执行语句 SELECT * FROM t WHERE a BETWEEN (1, 10000) AND b BETWEEN (50000, 100000) ORDER BY b LIMIT 1,从扫描行数上考虑,应该选择a上的索引,但通过MySQL执行计划发现,实际选择了b索引。因为优化器考虑了需要根据b排序,选择b索引扫描获取记录可以避免再排序。但是,使用a索引的查询耗时远比使用b索引耗时低。

如何避免选错索引

1、强制使用索引

使用force Index(a)强制SQL执行时采用某个索引,比如SELECT * FROM t force Index(a) WHERE a BETWEEN (1, 10000) AND b BETWEEN (50000, 100000) ORDER BY b LIMIT 1

2、重新计算基数

因为MySQL取样估计基数可能存在比较大的误差,导致优化器选择低效的执行方案。为了避免这个统计信息的问题,可以使用Analyze TABLE t来重新统计信息。

3、选择更合适的索引或者删除误用的索引

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5863.html

(0)
上一篇 2023-04-22
下一篇 2023-04-22

相关推荐

  • 提高生产力的Python模块:以py打头的10个词

    提高生产力的Python模块:以py打头的10个词a href=”https://www.python100.com/a/sm.html”font color=”red”免责声明/font/a a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-02-06
    100
  • Python爬虫工具

    Python爬虫工具随着互联网的不断发展,爬虫技术成为了互联网领域一个非常热门的技术。而作为目前市面上最为流行和使用最广泛的编程语言之一,Python在爬虫领域也具有很大的优势,并且有着非常丰富的开源爬虫工具。本篇文章将从多个方面,详细介绍Python爬虫工具的有关知识。

    2024-07-05
    50
  • navicat调节字体大小_页面字体大小怎么调

    navicat调节字体大小_页面字体大小怎么调Navicat是一套快速、可靠和全面的数据库管理工具,专门用于简化数据库管理和降低管理成本。Navicat图形界面直观,提供简便的管理方法,设计和操作MySQL、MariaDB、SQL Server、

    2023-06-10
    145
  • python二维码生成与扫码(python扫描二维码输出内容)

    python二维码生成与扫码(python扫描二维码输出内容)二维码不支持图片直接编译的,如果不知道如何用这个生成QR code带图片二维码的话,建议你使用二维码生成软件,在软件中生成二维码,前提是你需要将图片上传到服务器或者自己的网站,得到一个网站,就是二维码的内容,如图所示:

    2023-11-27
    141
  • Linux 7安装Mysql5.7版本

    Linux 7安装Mysql5.7版本Mysql 5.7的安装搭建 首先去到官方网站的下载链接中找到对应你Linux服务器版本的mysql软件包 https://dev.mysql.com/downloads/repo/yum/ 我使用的

    2023-05-20
    163
  • MS SQL为字段添加说明[通俗易懂]

    MS SQL为字段添加说明[通俗易懂]以ms sql server 14 v17为例。 如下表dbo.Q中有一个字段'' 首先在数据库的系统存储过程列表中: 找到sys.sp_addextendedproperty,使用这

    2022-12-28
    185
  • Mysql的学习

    Mysql的学习数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库? * 用于存储和管理数据的仓库。 3. 数据库的特点: 1. 持久化存储数据的。其实数据库就是一个文件系

    2023-03-20
    152
  • sql复制一行到下一行数据库_sqlserver复制表到另一个数据库

    sql复制一行到下一行数据库_sqlserver复制表到另一个数据库注意:PostgreSQL 12对主从复制实现和配置做了重大改进,如废弃了recovery.conf,并将参数转换为普通的PostgreSQL配置参数,使得配置群集和复制更加简单。 PostgreSQ

    2023-03-15
    142

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注