WHERE Clause Optimization

本文涉及的产品
RDS AI 助手,专业版
PolarDB Agent Flow,2核4GB
PolarSearch,搜索节点 4核8GB
简介: 本节探讨了WHERE子句的优化方法,虽然示例基于SELECT语句,但也适用于DELETE和UPDATE语句。MySQL自动执行多种优化,例如仅计算一次索引使用的常量表达式、快速检测无效表达式、合并HAVING和WHERE子句、优先读取常量表、寻找最佳连接组合、使用内存中的临时表、选择最佳索引以及在某些情况下仅使用索引树解析查询,从而提升查询效率。

本节讨论可以对处理WHERE子句进行的优化。这些示例使用SELECT语句,但同样的优化也适用于DELETE和UPDATE语句中的WHERE子句

image.png

您可能会试图重写查询以使算术运算更快,同时牺牲可读性。由于MySQL会自动执行类似的优化,因此您通常可以避免这项工作,并将查询保持在更易于理解和维护的形式。MySQL执行的一些优化如下:
image.png

image.png

索引使用的常量表达式只计算一次。
不带WHERE的单个表上的COUNT(*)直接从MyISAM和MEMORY表的表信息中检索。当仅与一个表一起使用时,也可以对任何NOT NULL表达式执行此操作。
早期检测无效的常量表达式。MySQL很快检测到某些SELECT语句是不可能的,并且不返回任何行。
如果不使用GROUP BY或聚合函数(COUNT()、MIN()等),HAVING将与WHERE合并。
对于联接中的每个表,构造一个更简单的WHERE,以快速计算表的WHERE,并尽快跳过行。
所有常量表都会在查询中的任何其他表之前首先读取。常数表可以是以下任何一种:
空表或只有一行的表。
与PRIMARY KEY或UNIQUE索引上的WHERE子句一起使用的表,其中所有索引部分都与常量表达式进行比较,并定义为NOT NULL。
以下所有表都用作常量表:

image.png

通过尝试所有可能性,找到连接表的最佳连接组合。如果ORDER BY和GROUP BY子句中的所有列都来自同一个表,则连接时首选该表。
如果存在ORDER BY子句和不同的GROUP BY子句,或者ORDER BY或GROUP BY包含联接队列中第一个表以外的表中的列,则会创建一个临时表。
如果您使用了DateTimeSMALL_RESULT修饰符,MySQL将使用内存中的临时表。
查询每个表索引,并使用最佳索引,除非优化器认为使用表扫描更有效。曾经,扫描是基于最佳索引是否覆盖了表的30%以上,但固定的百分比不再决定使用索引还是扫描。优化器现在更加复杂,其估计基于其他因素,如表大小、行数和I/O块大小。
在某些情况下,MySQL甚至可以在不查阅数据文件的情况下从索引中读取行。如果索引中使用的所有列都是数字,则只有索引树用于解析查询。
在输出每一行之前,跳过与HAVING子句不匹配的行。
一些非常快速的查询示例:

image.png

MySQL resolves the following queries using only the index tree, assuming that the indexed columns are numeric:

image.png

以下查询使用索引按排序顺序检索行,而无需单独的排序过程:

image.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
缓存 前端开发 UED
304状态码详解(协商缓存)
304状态码详解(协商缓存)
4774 0
|
5月前
|
弹性计算 自然语言处理 数据库
2026年阿里云最新优惠券参考,适合普通用户的新用户满减券与165元优惠券领取及使用教程分享
2026年截至目前,阿里云有哪些优惠券呢?除了学生优惠券和企业出海扶持优惠券等之外,适合普通个人和企业用户的优惠券目前主要有新用户满减券与165元优惠券,满减券金额虽然只有10元,但是使用门槛较低,165元优惠券相对金额更大,完成实名认证即可参与领取上云礼包,最高可减100元。有的新手用户可能不知道领券入口和使用教程,本文将详细介绍这两项活动的具体内容、领取方式和使用教程,以供参考。
|
5月前
|
机器学习/深度学习 自然语言处理 安全
2026年语音机器人技术架构解析与企业选型指南
随着AI技术发展,语音机器人已广泛应用于政务、医疗、企业服务等领域。本文从技术架构、核心指标、场景适配等维度,系统解析语音机器人选型关键,助力企业科学决策,推动智能化升级。
|
11月前
|
机器学习/深度学习 人工智能 开发者
如何让AI从简单的记忆型模型进化为具备深度推理能力的‘学霸’?—— 解析提升AI推理能力的四大核心技术
本文由AI专家三桥君探讨AI推理能力的四大核心技术:推理时间扩展、纯强化学习、标注数据+强化学习、知识蒸馏。通过对比记忆型与推理型AI的差异,分析显式与隐式推理的特点,揭示AI从"记忆答案"到"深度思考"的进化路径。三桥君指出,这些技术使AI在数学证明、编程等复杂任务中表现显著提升,但也面临算力成本与输出速度的平衡挑战。三桥君认为AI推理能力的发展将为科研、教育等领域带来革新,推动AI成为人类的"思考伙伴"。
733 0
|
6月前
|
XML Java 数据格式
Spring Boot 是什么?—— 简化 Spring 开发的革命性工具
自2002年Spring框架兴起,企业级Java开发迎来变革。但繁重的XML配置、复杂集成与外部容器依赖等问题凸显。2013年,Spring Boot应运而生,以自动配置、起步依赖、内嵌服务器等特性,实现“约定优于配置”,极大提升开发效率。它非替代Spring,而是其现代化加速器,让开发者专注业务,成为微服务与云原生时代的首选基石。
|
8月前
|
监控 NoSQL PHP
高并发手机直播系统:从直播架构设计开发到搭建部署上线
本文深入剖析高并发直播系统全链路架构与实战:涵盖需求分析、微服务设计、移动端优化、PHP后台性能提升、CentOS环境调优、CDN加速及运维监控,助力打造稳定、低延迟、可扩展的直播平台。
|
8月前
|
传感器 机器学习/深度学习 监控
车库一氧化碳空气质量监控系统,沃思智能
随着城市化发展,车库空气质量问题凸显。监控系统通过实时监测CO、NOx、PM2.5等污染物,联动通风与消防设备,结合智能算法与云端管理,保障地下空间环境安全。广泛应用于住宅、商业及特种车库,助力智慧城市建设,市场前景广阔。
326 1
|
8月前
|
关系型数据库 MySQL Linux
如何使用阿里云的主机搭建网站?
在数字化时代,用阿里云主机搭建网站因稳定便捷受青睐,零基础用户按步骤也能完成。先准备阿里云主机,选配置、设系统、配安全组;再搭运行环境,依系统选对应方式;接着部署 PageAdmin CMS;然后借其后台搭网站;最后绑域名上线,后续定期维护即可拥有实用网站。
|
9月前
|
JavaScript 前端开发 Java
基于springboot的4s店汽车试驾销售服务系统
针对传统4S店运营效率低、服务体验差等问题,研究基于SpringBoot的汽车销售服务系统,融合Java、Vue、MySQL等技术,实现业务自动化、客户个性化服务与数据智能分析,提升管理效率与客户满意度,推动4S店数字化转型与竞争力升级。
|
9月前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
1101 0