8.2.1 优化 SELECT 语句

8.2.1.1 WHERE 子句优化
8.2.1.2 范围优化
8.2.1.3 索引合并优化
8.2.1.4 哈希连接优化
8.2.1.5 发动机状态下推优化
8.2.1.6 指标条件下推优化
8.2.1.7 嵌套循环连接算法
8.2.1.8 嵌套连接优化
8.2.1.9 外部连接优化
8.2.1.10 外部连接简化
8.2.1.11 多范围读取优化
8.2.1.12 块嵌套循环和批密钥访问联接
8.2.1.13 条件过滤
8.2.1.14 恒定折叠优化
8.2.1.15 IS NULL 优化
8.2.1.16 按优化排序
8.2.1.17 分组优化
8.2.1.18 差异优化
8.2.1.19 LIMIT 查询优化
8.2.1.20 函数调用优化
8.2.1.21 窗口功能优化
8.2.1.22 行构造函数表达式优化
8.2.1.23 避免全表扫描

查询以 SELECT 语句的形式执行数据库中的所有查找操作。调整这些语句是当务之急,无论是实现动态网页的秒级响应时间,还是缩短几个小时来生成巨大的隔夜报告。

除了 SELECT 语句之外,查询的调优技术也适用于 CREATE TABLE ... AS SELECTINSERT INTO ... SELECT ,和 DELETE 语句中的 WHERE 子句。这些语句有额外的性能考虑,因为它们将写操作和面向读的查询操作结合在一起。

NDB 集群支持连接下推优化,从而将符合条件的连接整体发送到 NDB 集群数据节点,在这些节点之间可以是分布式的,并且并行执行。有关此优化的更多信息,请参阅 NDB 下推连接的条件

优化查询的主要考虑事项是:

  • 要使慢速 SELECT ... WHERE 查询速度更快,首先要检查的是是否可以添加索引。在 WHERE 子句中使用的列上设置索引,以加快结果的计算、筛选和最终检索。为了避免浪费磁盘空间,请构造一组索引,以加快应用程序中使用的许多相关查询。

    索引对于使用连接和外键等特性引用不同表的查询尤其重要。您可以使用 EXPLAIN 语句来确定 SELECT 使用了哪些索引。请参阅 第 8.3.1 节 “MySQL 如何使用索引”第 8.8.1 节 “使用 EXPLAIN 优化查询”

  • 隔离并调整查询的任何部分,例如函数调用,这会花费大量时间。根据查询的结构,可以为结果集中的每一行调用一次函数,甚至为表中的每一行都调用一次,从而大大提高了效率。

  • 尽量减少查询中的 全表扫描 次数,尤其是对于大表。

  • 通过定期使用 ANALYZE TABLE 语句使表统计信息保持最新,这样优化器就可以获得构建高效执行计划所需的信息。

  • 了解每个表的特定于存储引擎的调整技术、索引技术和配置参数。InnoDBMyISAM 都有一套在查询中启用和保持高性能的准则。有关详细信息,请参阅 第 8.5.6 节 “优化 InnoDB 查询”第 8.6.1 节 “优化 MyISAM 查询”

  • 您可以使用 第 8.5.3 节“优化 InnoDB 只读事务” 中的技术优化 InnoDB 表的单个查询事务。

  • 避免以难以理解的方式转换查询,尤其是当优化器自动执行某些相同的转换时。

  • 如果性能问题无法通过基本准则之一轻松解决,请通过阅读 EXPLAIN 计划并调整索引、 WHERE 子句、连接子句等来调查特定查询的内部细节。

  • 调整 MySQL 用于缓存的内存区域的大小和属性。通过高效使用 InnoDB 缓冲池、 MyISAM 键缓存和 MySQL 查询缓存,重复查询运行速度更快,因为第二次和后续时间都会从内存中检索结果。

  • 即使对于使用缓存内存区域快速运行的查询,您也可以进一步优化,使其需要更少的缓存内存,从而使应用程序更具可扩展性。可扩展性意味着您的应用程序可以同时处理更多的用户、更大的请求等,而不会出现性能的大幅下降。

  • 处理锁定问题,其中查询的速度可能会受到同时访问表的其他会话的影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独上西楼影三人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值