原文作者:蒙蒂
原文地址:https://hackmysql.com/post/book-0/
前言
2021 年 12 月 27 日
#mysql #book #efficient-mysql-performance
在使用 MySQL 17 年后,我写了一本书:Efficient MySQL Performance。
我将提出一个大胆的声明:从来没有人写过这样的 MySQL 书——甚至都没有。前言解释了为什么这本书是独一无二的:

MySQL 文献中存在基本 MySQL 知识和高级 MySQL 性能之间的差距。有几本书是关于前者的,还有一本关于后者的书:High Performance MySQL,第 4 版,作者 Silvia Botros 和 Jeremy Tinley (O'Reilly)。这是第一本弥合差距的书。
之所以存在差距,是因为 MySQL 很复杂,如果不解决这种复杂性(众所周知的房间里的大象),就很难教授性能。但是使用(而不是管理)MySQL 的工程师不需要成为 MySQL 专家即可获得卓越的 MySQL 性能。为了弥补差距,这本书的效率无可厚非——不要关注大象;它很友好。
高效的MySQL 性能意味着专注:只学习和应用直接影响卓越 MySQL 性能的最佳实践和技术。Focus 极大地缩小了 MySQL 复杂性的范围,并允许我向您展示一条更简单、更快捷的途径,通过 MySQL 性能的广阔而复杂的领域。旅程从第 1 章的第一句话“性能就是查询响应时间”开始。从那里开始,我们快速浏览索引、数据、访问模式等等。
本书从 1 到 5 分——其中一个是对任何人的介绍,而五个是对有抱负的专家的深入探讨——这本书的范围从三到四:深度,但远离底部。我假设您是一位经验丰富的工程师,具有关系数据库(MySQL 或其他)的基本知识和经验,因此我不解释 SQL 或数据库基础知识。我假设您是一位有成就的程序员,负责一个或多个使用 MySQL 的应用程序,因此我不断地参考该应用程序并相信您知道您的应用程序的详细信息。我还假设您对计算机很熟悉,所以我自由地谈论硬件、软件、网络等。
这篇博文是十一篇中的第一篇:一篇用于序言,十篇用于本书的每一章。这些博客文章是我“在这本书背后”的想法和沉思——没有印刷出来的东西。
有成就的工程师
我希望能写出更多像Efficient MySQL Performance这样的书。当我感到过分自豪时,我对自己说:“这是一本全新的科技书籍!” 但这种说法太大胆了,所以我不会大声说出来。但是,我认为是这样,因为我的整个青年和成年生活都在阅读科技书籍,我想不出任何像这样的科技书籍。
在我看来,MySQL 书籍领域主要由三种类型主导:基础、高级和操作指南。基本的 MySQL 书籍很明显:每个人都需要一个介绍,一个起点。高级 MySQL 书籍对高级工程师(例如工程主管)、DBA(新的或有抱负的)和希望在职业生涯中获得顶峰的 MySQL 专家很有用。Howto MySQL 书籍通常要么是如何操作 MySQL(针对 DBA),要么是如何使用 MySQL 作为产品(例如如何查询 MySQL)。
具有讽刺意味的是,也许这三种类型并没有针对最大的——我认为——最重要的受众:在他们的应用程序中使用 MySQL 的有成就的工程师。关键词是“有成就的”:这些工程师了解所有基础知识——他们可能已经编程和使用各种数据存储多年——所以他们知道他们在做什么。他们的专长和责任领域是他们的应用程序,而不是 MySQL。但由于该应用程序使用 MySQL,他们需要确保 MySQL “Just Works”——快速且无故障。为此,他们希望(或需要)更多地了解 MySQL,但仅限于他们的应用程序所必需的范围内。
这是有道理的。我们都使用我们没有时间或意愿成为专家的技术。我们只是想让技术发挥作用。MySQL 是无数软件工程师的这项技术。
对于 MySQL,工程师需要一本从他们的水平开始(已完成)并直接通向他们的目标(“Just Works”为他们的应用程序)的书。没有背景信息;不复习基础知识;没有不能直接适用或可操作的材料。直截了当:我需要知道什么和做什么才能使我的应用程序尽可能快地使用 MySQL?
Efficient MySQL Performance就是那本书。
欢迎来到丛林
写完这本书后,我很清楚为什么没有这样的书存在:这很难。不是写作——这相对容易——而是在众所周知的 MySQL 性能丛林中扫清道路。
MySQL 专家知道性能可能是一个非常复杂和微妙的问题。当然,有时 MySQL 的性能非常简单:缺少索引 → 表扫描 → 应用程序中断。你不需要对 MySQL 有太多的了解就可以解决这个问题。但是繁忙的应用程序往往不会有简单的问题,这就是它们首先能够扩大规模并变得繁忙的方式:通过避免简单的错误。
解决一个现实的性能问题意味着搜索丛林。原因和解决方案可能无处不在——提防陷阱,不要追随红鲱鱼。
但即使在一开始,工程师们就知道这种搜索是不可行的——它效率不高——因为 MySQL 是一个庞大而复杂的系统,并不是所有的系统都被记录在案。即使在互联网上搜索答案也无济于事,因为有经验的工程师知道他们的数据库问题与他们的应用程序、数据和查询有关。
你需要一个目标才能取得进步。目的地并没有让丛林变得不那么狂野,但它提供了焦点:向目的地前进;忽略其余的(暂时)。
专注会产生有效的努力(更少浪费的时间),这就是本书的标题。
我认为可以肯定地说,对于每个 OLTP 数据库,查询响应时间都是目标。您希望 MySQL 尽可能快地执行查询。就是这么简单。(在第 1 章中,我解释了原因。)
如果我们专注于提高响应时间(即缩短响应时间,这意味着查询执行得更快),那么首先要解决的也是最重要的主题是什么?我想大多数专家都会同意:索引。毫不奇怪,第 1 章涉及响应时间,第 2 章涉及索引。但由于这不是一本基本的 MySQL 书,这些章节很快就会深入——但不会太深——因为它是一个大丛林;不要浪费时间。
通向目标的途径
但是仅仅写技术性的东西是不够的。如果您想要大量深入的技术写作,请阅读MySQL 手册。(如果我没记错的话,Bill Karwin 曾经告诉我,如果打印出来,它会超过 1,000 页。)
我读过无数的技术书籍,大部分都传达了知识;很少教。
传达知识虽然很重要,但就像是大脑垃圾场,就像作者说的,“知道这个,这个,还有这个。这就是它的工作原理。” 并且希望读者在他们的脑海中“连接点”或“把它放在一起”,以使知识适用。简而言之,这本书关注并停留在单纯的知识上。
教学显示了通向目标的道路,并帮助您学习如何实现目标。这就是我在Efficient MySQL Performance中努力做的事情。(即使是笑话和双关语也有一个目的:小小的精神休息,这样,希望阅读是有趣和令人耳目一新的。)虽然这本书充满了深刻的技术内容,但这不是我如何(或在哪里)看到它的主要价值。它的主要价值在于它如何有条不紊地教授:整本书,从第 1 章到第 10 章,都是精心制作的课程,随着您朝着一个目标前进,它会加深和扩展您对 MySQL 的理解:提高查询响应时间。
在庞大的 MySQL 中,提高查询响应时间似乎是一个太小或太简单的目标。MySQL的性能真的可以这么简单吗?对于大多数使用 MySQL 的工程师来说:是的,就这么简单。但这并不意味着路径很简单:MySQL 性能很复杂。 高效的 MySQL 性能是 300 多页,因为有很多关于响应时间的知识。
大胆的主张
我确信高效的 MySQL 性能会导致 MySQL 的成功。这是另一个大胆的主张,但我几乎每周都会看到并向新工程师、新团队或新应用程序重复它的课程。我看到我的 DBA 同事也这样做。
最后一个大胆的声明:本书中的所有内容都是使用 MySQL 的软件工程师所需的知识。说真的:如果您负责使用 MySQL 的应用程序,请阅读本书。这需要几个小时,但它会教您多年的知识和技能,您可以立即应用。
谢谢你
感谢审阅本书的 MySQL 专家:Vadim Tkachenko、Frédéric Descamps 和 Fernando Ipar。感谢审阅本书部分内容的 MySQL 专家:Marcos Albe、Jean-François Gagné 和 Kenny Gryp。感谢多年来帮助我、教导我并提供机会的许多其他 MySQL 专家:Peter Zaitsev、Baron Schwartz、Ryan Lowe、Bill Karwin、Emily Slocombe、Morgan Tocker、Shlomi Noach、Jeremy Cole、Laurynas Biveinis、Mark Callaghan、Domas Mituzas、Ronald Bradford、Yves Trudeau、Sveta Smirnova、Alexey Kopytov、Jay Pipes、Stewart Smith、Aleksandr Kuzminsky、Alexander Rubin、Roman Vynar,以及——再次——Vadim Tkachenko。
谢谢你,蒙蒂。
MySQL 对我来说是一个很棒的职业和生计。对于我们中的许多人(包括我自己)来说,这也是我们个人生活中值得注意的一部分。我感谢您的帮助、支持、鼓励以及我们分享的所有经验。




