iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 8.0 对 limit 的优化技巧
  • 399
分享到

MySQL 8.0 对 limit 的优化技巧

2024-04-02 19:04:59 399人浏览 安东尼
摘要

目录一、前言二、Mysql 8.0 对limit 的改进三、实践出真知3.1 默认开启参数3.2 关闭该参数四、总结一、前言 提到 limit 优化,大多数 mysql DBA 都不会陌生,能想到各种应对策略,比如延迟关

一、前言

提到 limit 优化,大多数 mysql DBA 都不会陌生,能想到各种应对策略,比如延迟关联,书签式查询等等,之前我也写过一篇优化的文章:https://www.jb51.net/article/234357.htm ,有兴趣的朋友可以复习一下。

二、Mysql 8.0 对limit 的改进

对于 limit N 带有 group by ,order by 的 SQL 语句 (order by 和 group by 的字段有索引可以使用),MySQL 优化器会尽可能选择利用现有索引的有序性,减少排序–这看起来是 SQL 的执行计划的最优解,但是实际上效果其实是南辕北辙,相信很多 DBA 遇到的相关案例中 sql 执行计划选择 order by id 的索引进而导致全表扫描,而不是利用 where 条件中的索引查找过滤数据。MySQL 8.0.21 版本之前,并没有什么参数来控制这种行为,但是自 MySQL 8.0.21 之后提供一个优化器参数 prefer_ordering_index ,通过设置 optimizer_switch 来开启或者关闭该特性 。 比如:

SET  optimizer_switch  = "prefer_ordering_index=off";
SET  optimizer_switch = "prefer_ordering_index=on";

三、实践出真知

测试环境 MySQL 社区版 8.0.30

构造测试数据

CREATE TABLE t (
id1 BIGINT  NOT NULL  PRIMARY KEY auto_increment, 
id2 BIGINT NOT NULL,
c1 VARCHAR(50) NOT NULL,
c2 varchar(50) not null,
INDEX i (id2, c1));

insert into t(id2,c1,c2) values(1,'a','xfvs'),(2,'bbbb','xfvs'),(3,'cDDDd','xfvs'),(4,'dfdf','xfvs'),(12,'bbbb','xfvs'),(23,'cdddd','xfvs'),(14,'dfdf','xfvs'),
(11,'bbbb','xfvs'),(13,'cdddd','xfvs'),(44,'dfdf','xfvs'),(31,'bbbb','xfvs'),(33,'cdddd','xfvs'),(34,'dfdf','xfvs');

3.1 默认开启参数

mysql  (test) >  SELECT @@optimizer_switch LIKE '%prefer_ordering_index=on%';
+------------------------------------------------------+
| @@optimizer_switch LIKE '%prefer_ordering_index=on%' |
+------------------------------------------------------+
|                                                    1 |
+------------------------------------------------------+
1 row in set (0.00 sec)

查询非索引字段 ,id2 上有索引 ,order by 主键 id1 ,explain 查看执行计划 type index 说明使用索引扫描使用 using where 过滤结果集。这个是优化器的自以为的最优选择,但是实际上遇到数据集合比较大的表,该执行计划就不是最优解,反而导致慢查。

mysql  (test) > explain select c2 from t where id2>8 ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t
   partitions: NULL
         type: index
possible_keys: i
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 2
     filtered: 69.23
        Extra: Using where
1 row in set, 1 warning (0.00 sec)

3.2 关闭该参数

mysql  (test) > SET optimizer_switch = "prefer_ordering_index=off";

mysql  (test) > explain select c2 from t where id2>8 ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t
   partitions: NULL
         type: range
possible_keys: i
          key: i
      key_len: 8
          ref: NULL
         rows: 9
     filtered: 100.00
        Extra: Using index condition; Using filesort
1 row in set, 1 warning (0.00 sec)

经过调整之后,查看执行计划发现优化器选择 id2 索引字段找到记录做过滤,并且使用了ICP 特性,减少物理 io 请求,而不是选择使用主键 id1 遍历索引然后回表查询。

显然 通过人为介入参数调整优化器的行为能带来更好的优化效果。

四、总结

从不同版本的 MySQL 发展轨迹来看 MySQL 的优化器越来越智能 (比如大家期待已久的直方图特性) ,能更多的减少人为干预,提升执行计划的准确性。

到此这篇关于MySQL 8.0 对 limit 的优化的文章就介绍到这了,更多相关MySQL 8.0 limit优化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 8.0 对 limit 的优化技巧

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL 8.0 对 limit 的优化技巧
    目录一、前言二、mysql 8.0 对limit 的改进三、实践出真知3.1 默认开启参数3.2 关闭该参数四、总结一、前言 提到 limit 优化,大多数 MySQL DBA 都不会陌生,能想到各种应对策略,比如延迟关...
    99+
    2024-04-02
  • MySQL 8.0 对 limit 的优化技巧
    目录一、前言二、MySQL 8.0 对limit 的改进三、实践出真知3.1 默认开启参数3.2 关闭该参数四、总结一、前言 提到 limit 优化,大多数 MySQL DBA 都不...
    99+
    2022-11-13
    MySQL 8.0  limit优化 MySQL 8.0  limit
  • Mysql优化技巧之Limit查询的示例分析
    小编给大家分享一下Mysql优化技巧之Limit查询的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言在实际业务中对于分页来说是一个比较常见的业务需求。那么就会使用到limit查...
    99+
    2024-04-02
  • 优化MySQL的小技巧
    这篇文章主要介绍了优化MySQL的小技巧,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.没有两个数据库或者应用程序是完全相同的。这里假设我...
    99+
    2024-04-02
  • MYSQL limit的优化方法
    本篇内容主要讲解“MYSQL limit的优化方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MYSQL limit的优化方法”吧! ...
    99+
    2024-04-02
  • 优化MySQL的技巧有哪些
    这篇文章主要介绍优化MySQL的技巧有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SQL执行慢的原因网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等硬件问题没有索引或者索引...
    99+
    2024-04-02
  • 优化MySQL的3个小技巧
    这篇文章将为大家详细讲解有关优化MySQL的3个小技巧,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我并不期望成为一个专家级的 DBA,但是,在我优化 MySQL 时,我...
    99+
    2024-04-02
  • MySQL优化技巧有哪些
    本篇内容主要讲解“MySQL优化技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL优化技巧有哪些”吧!SQL 优化已经成为衡量程序猿优秀与否的硬...
    99+
    2024-04-02
  • mysql join优化的技巧有哪些
    优化MySQL JOIN操作可以提高查询性能,以下是一些常见的优化技巧:1. 使用合适的索引:确保参与JOIN的列都有合适的索引,这...
    99+
    2023-10-23
    mysql join
  • mysql sql优化的技巧有哪些
    以下是一些MySQL SQL优化的常见技巧: 使用索引:为频繁使用的列创建索引,以提高查询性能。可以使用EXPLAIN语句来分析查...
    99+
    2024-04-09
    mysql
  • CentOS系统下MySQL的优化技巧
    本篇内容介绍了“CentOS系统下MySQL的优化技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(1) 服务器硬件对MySQL性能的影响...
    99+
    2023-06-16
  • 优化MySQL视图的性能技巧
    标题:优化MySQL视图的性能技巧 MySQL视图是一种虚拟的表,它是一个基于查询结果的表。在实际开发中,我们经常会使用视图来简化复杂的查询操作,提高代码的可读性和维护性。然而,当数据...
    99+
    2024-03-15
    缓存 查询 索引
  • mysql中limit优化的示例分析
    小编给大家分享一下mysql中limit优化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!    ...
    99+
    2024-04-02
  • 9种 MySQL数据库优化的技巧
    目录1、选择最合适的字段属性2、尽量把字段设置为NOT NULL3、使用连接(JOIN)来代替子查询(Sub-Queries)4、使用联合(UNION)来代替手动创建的临时表...
    99+
    2024-04-02
  • MySQL中的索引优化技巧详解
    MySQL是一个开源的关系型数据库管理系统,被广泛应用于各种网站和应用程序中。索引是MySQL中关键的性能优化手段之一,对于大型数据表来说尤为重要。本文将介绍MySQL中的索引优化技巧,并附加相应的代码示例。一、什么是索引索引是一种特殊的数...
    99+
    2023-10-22
    技巧 优化 索引
  • MySQL limit性能分析与优化
    一、结论 语法结构: limit offset, rows 结论:rows 相同条件下,offset 值越大,limit 语句性能越差 二、测试 执行测试: 5750000 条数据 sql 1 执行时间:...
    99+
    2024-04-02
  • MySQL中怎么优化limit查询
    今天就跟大家聊聊有关MySQL中怎么优化limit查询,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  同样是取10条数据select&n...
    99+
    2024-04-02
  • MySQL查询优化技巧有哪些
    使用索引:确保数据库表的字段都有合适的索引,这样可以加快查询的速度。避免查询所有字段:只选择需要的字段进行查询,避免查询过多无用字...
    99+
    2024-04-09
    MySQL
  • Mysql索引优化技巧有哪些
    Mysql索引优化的一些技巧包括: 使用合适的数据类型:选择合适的数据类型来存储数据,避免使用过大或者不必要的数据类型,能够减小...
    99+
    2023-10-28
    Mysql
  • MySQL分页Limit的优化过程实战
    前言 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。 SELECT * FROM table LIMIT [o...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作