Skip to Content
《MySQL 烹饪书》第 4 版
book

《MySQL 烹饪书》第 4 版

by Sveta Smirnova, Alkin Tezuysal
May 2025
Beginner to intermediate
974 pages
14h 39m
Chinese
O'Reilly Media, Inc.
Content preview from 《MySQL 烹饪书》第 4 版

第 21 章 查询性能 查询性能

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

21.0 引言

如果按照 的意图创建和使用索引,则可以利用索引快速查找记录。以下是使用索引的主要原因:

  • 利用SELECT 语句中的WHERE 子句,有效查找记录。

  • 通过索引存储在给定列中的值的唯一性(称为卡入度)和返回的最少行数,找到最佳查询执行计划。

  • 启用不同表之间的连接操作。

索引对于高效扫描和搜索表中的值至关重要。如果没有索引,MySQL 在执行查询时就需要读取给定表中的所有行。 由于表的大小不同,MySQL 必须将从表中读取的所有数据带入内存,而且只能对所选数据进行排序、过滤和返回值。这种操作可能需要额外的资源来将数据复制到一个新的临时表中,以执行排序操作。索引对查询性能至关重要;因此,除非是小型参考表,否则无索引表对数据库来说是相当大的开销。

为实现快速查询性能,每个表都需要一个主键,代表一个 或更多列。在使用 InnoDB 存储引擎时,表的数据在物理上是有序的,以便使用主键列进行快速查找和排序。理想的表设计使用覆盖索引,通过索引列计算查询结果。MySQL 使用的大多数索引都存储在 B 树中,由于减少了数据访问时间,因此可以实现快速数据访问。

如果表的数据量很大,而且没有任何键,那么创建一个额外字段(如table_name_id )作为主键,可以在进行连接操作时设置唯一指针,从而带来相当大的好处。如果用户尚未创建主键,InnoDB 表总是有一个代表主键的聚类索引。聚类索引是指表中的数据和记录是按照表中键值的顺序单向存储的。

备注

如果查询中没有使用WHERE 子句,对于 MySQL 优化器来说就是全表扫描。 例如

SELECT * FROM customer;

这不会改变customer 表的索引是否存在。

在开始使用指数策略之前,您需要了解以下一些关键术语:

表格扫描

表扫描会在执行查询时读取给定表中的所有记录。开发人员应尽可能避免全表扫描, ,包括进行COUNT(*) 操作。

树形遍历

树遍历是索引用来以跳数方式访问数据的一种方法。索引的目标是,通过遍历以最小的跳数获取数据。叶节点的数量越少,索引遍历的速度就越快。

叶节点

叶节点是 B 树索引结构的一部分。它们随着数据的变化而维护索引中 的变化,并建立一个双链表来连接索引叶节点。

B 树结构

B 树是一种自平衡树形数据结构,它能使数据保持分类, ,允许在对数时间内进行搜索、顺序访问、插入和删除。B 树是二叉搜索树的一种概括,一个节点可以有两个以上的子节点。

虽然 B 树索引在 MySQL 存储引擎中普遍使用,但不同种类的数据结构也用于哈希索引。 散列索引具有不同的特性和各自的使用情况。 详情请查阅《MySQL 参考手册》中的"B 树索引与哈希索引的比较"。

警告

虽然索引可以帮助您更快地检索记录,但过度创建或保留 未使用的索引会给数据库的 I/O 操作带来负担。 所有UPDATE/INSERT/DELETE 操作都必须维护每个索引叶页(索引的最底层,索引的所有键都按排序顺序出现在这里),因此会产生额外的开销。

21.1 创建索引

问题

您的查询响应非常缓慢。

解决方案

在列上创建索引,以便只检索所需的记录。

讨论

没有索引的表只是随机写入的日志数据,没有可供查询的参照物。因此,对此类表的大多数查询都会很慢。只有行数有限的参考表例外,这取决于模式设计。

MySQL 建议为每个表提供一个主键列 ,并为每一行提供NOT NULL 特性。

我们有一个名为 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

SQL 口袋指南,第 4 版

SQL 口袋指南,第 4 版

Alice Zhao
《Java 思维》,第二版

《Java 思维》,第二版

Allen B. Downey, Chris Mayfield

Publisher Resources

ISBN: 9798341659452