Optimization and Indexes

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS Agent Manager,2核4GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: MySQL通过索引快速定位具有特定列值的行,避免全表扫描,提高查询效率。常用的索引如PRIMARY KEY、UNIQUE等大多存储在B树中,特殊情况使用R树或哈希索引。索引帮助快速匹配WHERE子句条件的行,减少候选行数,并在多列索引和表连接操作中优化查询。具体特性如B树和哈希索引的比较见特定章节。

8.3.1 How MySQL Uses Indexes
索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以查找相关行。桌子越大,成本就越高。如果表中有相关列的索引,MySQL可以快速确定要在数据文件中间查找的位置,而无需查看所有数据。这比按顺序读取每一行快得多。
大多数MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)都存储在B树中。例外情况:空间数据类型的索引使用R树;MEMORY表还支持哈希索引;InnoDB对FULLTEXT索引使用倒排列表。
一般来说,索引的使用如以下讨论所述。第8.3.8节“B树和哈希索引的比较”描述了哈希索引(如MEMORY表中使用的)的特定特征。

MySQL uses indexes for these operations:
快速查找与WHERE子句匹配的行。
消除考虑中的行。如果可以在多个索引之间进行选择,MySQL通常会使用找到最少行数的索引(最具选择性的索引)。
如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀来查找行。例如,如果你在(col1,col2,col3)上有一个三列索引,那么你在(coll1)、(col1、col2)和(col1)、col2、col3上都有索引搜索功能。有关更多信息,请参阅第8.3.5节“多列索引”。
执行联接时从其他表中检索行。如果列被声明为相同的类型和大小,MySQL可以更有效地在列上使用索引。在这种情况下,如果VARCHAR和CHAR被声明为相同的大小,则它们被认为是相同的。例如,VARCHAR(10)和CHAR(15)的大小相同,但VARCHAR。

对于非二进制字符串列之间的比较,两列应使用相同的字符集。例如,将utf8列与latin1列进行比较会排除使用索引。
如果不进行转换就无法直接比较值,则不同列的比较(例如,将字符串列与时间列或数字列进行比较)可能会阻止使用索引。对于数字列中的给定值(如1),它可能与字符串列中的任意数量的值(如“1”、“1”,“00001”或“01.e1”)进行比较。这排除了对字符串列使用任何索引的可能性。
查找特定索引列key_col的MIN()或MAX()值。这由预处理器进行优化,该预处理器检查您是否在索引中key_col之前出现的所有关键部分上使用WHERE key_part_N=常量。在这种情况下,MySQL对每个MIN()或MAX()表达式进行单键查找,并将其替换为常量。如果所有表达式都被常量替换,则查询会立即返回。例如:

image.png

如果排序或分组是在可用索引的最左侧前缀上完成的,则对表进行排序或分组(例如,ORDER BY key_part1、key_part2)。如果所有关键部分后面都跟着DESC,则按相反顺序读取密钥.按优化排序分组。

在某些情况下,可以优化查询以检索值,而无需查询数据行。(为查询提供所有必要结果的索引称为覆盖索引。)如果查询仅使用表中某些索引中包含的image.png
列,则可以从索引树中检索所选值以获得更快的速度:

索引对于小表上的查询或报表查询处理大部分或全部行的大表来说不太重要。当查询需要访问大部分行时,按顺序读取比遍历索引更快。即使查询不需要所有行,顺序读取也可以最大限度地减少磁盘查找。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
人工智能 自然语言处理 开发工具
Pangea:卡内基梅隆大学开源的多语言多模态大语言模型
Pangea是由卡内基梅隆大学团队开发的多语言多模态大型语言模型,支持39种语言,包含高质量英文指令、机器翻译指令及文化相关任务。该模型在多语言和文化背景下的性能超越现有开源模型,适用于多语言客户服务、教育和学习、跨文化交流等多个应用场景。
511 2
Pangea:卡内基梅隆大学开源的多语言多模态大语言模型
|
缓存
配置 proxy_cache_valid 指令的示例
【10月更文挑战第2天】
515 14
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
976 62
|
SQL 人工智能 数据处理
《AI赋能SQL Server,数据处理“狂飙”之路》
在数据爆炸的时代,SQL Server作为主流关系型数据库管理系统面临复杂查询与海量数据的挑战。引入人工智能(AI)为优化查询性能提供了全新路径。AI能精准洞察查询瓶颈,优化执行计划;通过预测性维护提前预防性能隐患;智能管理索引以提升查询效率;并基于持续学习实现动态优化。这些优势不仅提高数据处理效率、降低运营成本,还助力企业在数字化竞争中抢占先机,推动SQL Server与AI深度融合,为企业可持续发展注入新动能。
451 4
html动态爱心代码【附源码】
html动态爱心代码【附源码】
618 0
|
网络安全 数据安全/隐私保护
华为USG6000V防火墙的初始密码及修改密码的操作
华为USG6000V防火墙的初始密码及修改密码的操作
954 0
|
API 数据处理 开发工具
云计算在金融行业的应用与挑战
云计算在金融行业的应用与挑战
1182 0
|
消息中间件 缓存 Java
【Java】全套云HIS(医院信息管理系统)可对接医保 采用云端SaaS模式部署
总体框架: SaaS应用,全浏览器访问 前后端分离,多服务协同 服务可拆分,功能易扩展
967 1
【Java】全套云HIS(医院信息管理系统)可对接医保 采用云端SaaS模式部署
|
SQL 数据采集 存储
SQL server 特殊字符"\u0000"处理
【9月更文挑战第12天】在 SQL Server 中,空字符 `\u0000` 可能导致数据处理问题。解决方法包括:1) 查找包含该字符的数据,使用 `LIKE '%\u0000%'` 进行查询;2) 替换该字符,使用 `REPLACE` 函数将其替换为空或其他字符;3) 在应用程序中验证和清理输入数据,防止其插入数据库;4) 注意数据类型、索引性能及数据库设计,确保数据质量和可靠性。
1054 0
|
弹性计算 负载均衡 算法
轮询算法介绍
轮询算法介绍
511 4