广告
返回顶部
首页 > 资讯 > 数据库 >mysql-查询性能优化
  • 153
分享到

mysql-查询性能优化

mysql-查询性能优化 2021-02-18 04:02:13 153人浏览 猪猪侠
摘要

不要取出全部列,取出全部列,会让优化器无法完成索引覆盖扫描这类优化,还会为服务器带来额外的I/O、内存和CPU的消耗。应该严格禁止SELECT * 的写法。Mysql使用如下三种方式应用WHERE条件,从好到坏依次

mysql-查询性能优化

不要取出全部列,取出全部列,会让优化器无法完成索引覆盖扫描这类优化,还会为服务器带来额外的I/O、内存和CPU的消耗。应该严格禁止SELECT * 的写法。Mysql使用如下三种方式应用WHERE条件,从好到坏依次为:

  1.1 在索引中使用WHERE条件来过滤不匹配的记录。这是在存储引擎层完成的。

  1.2 使用索引覆盖扫描(Extra列中出现了Using index)来返回记录,直接从索引中过滤不需要的记录并返回命中的结果。这是在mysql服务器层完成的,但无须在回表查询记录。

  1.3 从数据表中返回数据,然后过滤不满足条件的记录(在Extra列中出现Using Where)。这在Mysql服务器层完成,MySQL需要先从数据表独处记录然后过滤。

上面的例子说明了好的索引很重要。

如果发现查询需要扫描大量的数据但值返回少数的行,那么可以尝试下面的技巧优化它:

  2.1 使用索引覆盖扫描,把所有需要用的列都放到索引中,这样存储引擎无须回表获取对应行就可以返回结果了。

  2.2 改变库表结构。例如使用单独的汇总表。

  2.3 重写这个复杂的查询,让MySQL优化器能够以更优化的方式执行这个查询。

重构查询:

  1、一个复杂查询还是多个简单查询;

  2、切分查询;

  例如:

DELECT FROM message WHERE created < DATE_SUB(NOW(),INTERVAL 3 MONTH);

改成:

rows_affected=0
do{
    rows_affected=do_query(
        "DELECT FROM message WHERE create created < DATE_SUB(NOW(),INTERVAL 3 MONTH) LIMIT 10000"
    )
} while rows_affected > 0

  一次删除一万行数据一般来说比较高效,如果每次删除数据后,都暂停一会儿再做下一次删除,这样也可以将服务器上原本一次性的压力分散到一个很长的时间段中,可以大大的减少对服务器的影响

  3、分解关联查询

查询优化处理

  查询优化处理包括多个子阶段:解析SQL、预处理、优化SQL执行计划。这个过程中的任何错误(例如语法错误)都可能终止查询。

  优化策略可以简单的分为两种:

  1、静态优化:直接对解析树进行分析,并完成优化

  2、动态优化:动态优化跟查询上下文有关,也可能和很多其他因素有关,例如WHERE条件中的取值、索引中条目对应的数据行数等。

  MySQL能够处理的优化类型:

  • 重新定义关联表的顺序。
  • 将外连接转化成内连接。
  • 使用等价变换规则。
  • 优化COUNT()、MIN()和MAX()。
  • 预估并转化为常数表达式
  • 覆盖索引扫描
  • 子查询优化
  • 提前终止查询
  • 等值传播
  • 列表IN()的比较

  怎么查看优化器重写后的SQL?

  用到了explain extended和showwarnings

  用ORDER BY排序,如果查询中有LIMIT的话,LIMT也会在排序之后应用,所以即使需要返回较少的数据,历史表和需要排序的数据量仍然会非常大。MySQL5.6在这里做了很多重要的改进。当只需要返回部分排序结果的时候,例如使用LIMIT子句,MySQL不再对所有的结果进行排序,而是根据实际情况,选择抛弃不满足条件的结果,然后再进行排序。

参考:

[1]Baron Schwartz等 著,宁海元等 译 ;《高性能MySQL》(第3版); 电子工业出版社 ,2013

您可能感兴趣的文档:

--结束END--

本文标题: mysql-查询性能优化

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

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

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

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

下载Word文档
猜你喜欢
  • mysql-查询性能优化
    不要取出全部列,取出全部列,会让优化器无法完成索引覆盖扫描这类优化,还会为服务器带来额外的I/O、内存和CPU的消耗。应该严格禁止SELECT * 的写法。MySQL使用如下三种方式应用WHERE条件,从好到坏依次...
    99+
    2021-02-18
    mysql-查询性能优化
  • MYSQL(四)查询性能优化
    优化数据访问1.是否向数据库请求了不需要的数据解决方式:A. 查询后加limitB. Select后写需要的列而不是*2. 是否扫描了额外的数据数据库的访问方式速度由...
    99+
    2022-10-18
  • MySQL优化 - 性能分析与查询优化
    MySQL优化 - 性能分析与查询优化    优化应贯穿整个产品开发周期中,比如编写复杂SQL时查看执行计划,安装MySQL服务器时尽量合理配置(见过太多完全使用默认配置安装的情况),根...
    99+
    2022-10-18
  • 如何优化MySQL的查询性能?
    如何优化MySQL的查询性能?MySQL是一款广泛应用于Web开发的关系型数据库管理系统。然而,在处理大量数据和复杂查询时,MySQL的查询性能可能会受到影响,从而导致应用程序的响应时间变慢。为了提高MySQL的查询性能,我们可以采取以下几...
    99+
    2023-10-22
    索引优化 数据库缓存 查询重写
  • MySQL中怎么优化查询性能
    MySQL中怎么优化查询性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。WHERE条件字段使用函数假设我们有如下创建表的语句mysq...
    99+
    2022-10-18
  • MySQL查询性能优化索引下推
    目录前言1. 索引下推的作用2. 案例实践3. 索引下推配置4. 索引下推原理剖析5. 索引下推应用范围前言 前面已经讲了mysql的其他查询性能优化方式,没看过可以去了解一下: MySQL查询性能优化七种方式索引潜水 ...
    99+
    2022-08-16
    MySQL查询性能优化 MySQL索引下推
  • MySQL性能调优之查询优化的方法
    本篇内容介绍了“MySQL性能调优之查询优化的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、查询慢...
    99+
    2022-10-19
  • MySQL高性能索引策略和查询性能优化
    前缀索引和索引选择性 有时候需要索引很长的字符,这会让索引变得大且慢。一个策略是模拟哈希索引。 通常可以索引开始的部分字符,这样可以大大解约索引空间,提高索引效率。但这样会降低索引的选择性。 索引的选择性:不重复的索引值(也成为基数)和...
    99+
    2017-05-17
    MySQL高性能索引策略和查询性能优化
  • MySQL数据库查询性能优化策略
    优化查询 使用Explain语句分析查询语句 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句。 通过对查询语句的分析,可以了解查询语句的执行情况,找出查询...
    99+
    2022-05-25
    MySQL 优化 MySQL 查询优化 MySQL 查询性能优化
  • mysql优化——查询优化
    这一篇mysql优化是注重于查询优化,根据mysql的执行情况,判断mysql什么时候需要优化,关于数据库开始阶段的数据库逻辑、物理结构的设计结构优化不是本文重点,下次再谈。 查看mysql语句的执行情况,判断是否需要进行优化 ...
    99+
    2016-09-05
    mysql优化——查询优化
  • MySQL大数据查询性能优化的示例
    这篇文章将为大家详细讲解有关MySQL大数据查询性能优化的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySQL性能优化包括表的优化与列类型选择,表的优化可以细分为...
    99+
    2022-10-18
  • mysql查询优化
    select * from a where id in (select id from b) 等价于: for select id from b for select 8 from...
    99+
    2022-02-02
    mysql查询优化
  • MySQL 查询优化
    查询优化常用策略  1、优化数据访问:应用程序应该减少对数据库的数据访问,数据库应该减少实际扫描的记录数     例如,Redis缓存,避免"selec&#...
    99+
    2022-10-18
  • MySQL查询性能优化武器之链路追踪
    目录前言1. 查看optimizer trace配置2. 开启optimizer trace3. 线上问题复现3. 使用optimizer trace前言 mysql优化器可以生成Explain执行计划,我们可以通过执行...
    99+
    2022-08-08
    MySQL查询性能优化 MySQL链路追踪
  • 如何通过查询优化MySQL数据库性能
    如何通过查询优化MySQL数据库性能?相信很多新手小白还没学会这个技能,通过这篇文章的总结,希望你能学会这个技能。以下资料是实现的步骤。查询是数据库技术中最常用的操作。查询操作的过程比较简单,首先从客户端发...
    99+
    2022-10-18
  • 5招带你轻松优化MySQL count(*)查询性能
    目录前言1 count(*)为什么性能差2 如何优化count(*)性能2.1 增加Redis缓存2.2 加二级缓存2.3 多线程执行2.4 减少join的表2.5 改成ClickHouse3 count的各种用法性能对...
    99+
    2022-11-19
    MySQLcount(*)查询性能 MySQLcount(*)查询 MySQLcount(*)
  • 通过MySQL慢查询优化MySQL性能的方法讲解
    随着访问量的上升,MySQL数据库的压力就越大,几乎大部分使用MySQL架构的web应用在数据库上都会出现性能问题,通过mysql慢查询日志跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql...
    99+
    2022-10-18
  • MySQL查询性能优化七种方式索引潜水
    目录前言: 有读者可能会一脸懵? 啥是索引潜水? 你给起的名字的吗?有没有索引蛙泳? 这个名字还真不是我起的,今天要讲的知识点就叫索引潜水(Index dive) 。 先要...
    99+
    2022-11-13
    MySQL查询性能优化 MySQL索引潜水
  • 如何优化MySQL查询
    这篇文章给大家介绍如何优化MySQL查询,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。解析器和预处理器一开始,MySQL 的解析器将查询语句拆分成一系列指令并从中构建一棵“解析树”。解析器使用 MySQL 的SQL 语...
    99+
    2023-06-15
  • mysql in慢查询优化
    目录记一次mysql慢查询优化——生产环境待办列表现场演示5~6s才加载出来结果;顿时,产品经理的脸挂不住了,作为多年经验的老开发,心想完犊子,脸啪啪滴。 不过,秉着多年的江湖经验,遇事不慌,拍个...
    99+
    2023-05-12
    mysql in慢查询优化 mysql in慢查询优化
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作