准确的电话号码和 WhatsApp 号码提供商。 如果您想要电子邮件营销活动列表或短信营销活动,那么您可以联系我们的团队。 电报: @xhie1

MySQL 是世界上使用最广泛的开源数据库,在所有数据库中受欢迎程度排名第二(以微弱优势)。MySQL 是一种有效的关系数据库管理系统,长期以来一直是流行应用程序的中心。然而,它使用起来可能很棘手,而且性能还有很大的改进空间。过去几年还发生了一些重要的事态发展。本文介绍了 Baron Schwarz 撰写的 MySQL 性能调优技巧的更新。

ⓒ 盖蒂图片银行

设计与任何其他 MySQL 配置一样重要

模式设计是您需要对数据库执 泰国电话号码数据 行的最重要的事情之一。跨关系数据库技术原理在 20 世纪 70 年代被标准化。自从 MySQL 在 5.6 版本将默认存储引擎切换为 InnoDB 以来,模式设计变得更加重要。

为什么?在InnoDB中,一切都是主键。这和InnoDB组织数据的方式有关。在InnoDB中,主键是聚集的,所有辅助键都向主键添加条目指针。如果您在设计模式时没有考虑到这一点,您将遭受性能损失。由于数据是使用 B 树索引存储的,因此以有序方式(即准顺序值)插入数据可以防止主键碎片,从而减少查找叶节点所需的 I/O 操作。

在某些情况下,顺序主键不匹配。一个代表性的例子是通用唯一标识符,简称UUID。有关 UUID 和主键的更多深入信息可以在此处找到。在大多数情况下,最好使用顺序主键。

MySQL 性能技巧 不要敌视辅助键

电话号码 数据

辅助键由后台进程更新,对性 数字列表 能的影响并不像人们想象的那么大。相反,添加辅助键会增加存储要求,因此会对磁盘使用产生影响。对没有索引的字段进行过滤可能会导致每次运行查询时进行全表扫描。当然,这会对性能产生巨大的影响。因此,有一把备用钥匙总比没有好。

但是,应避免对数据库建立过多索引。这是因为运行许多索引可能无法达到预期的性能改进。此外,额外的索引会增加存储成本,并且InnoDB需要做大量后台工作来保持索引最新。

MySQL 性能技巧 3. 可以通过索引提供行
虽然 InnoDB 可以直接从索引查找并提供行,但辅助键指向主键,并且主键包含行本身。另外,如果InnoDB缓冲池足够大,大多数数据都可以保存在内存中。您还可以在查询中使用复合键,这通常比单个特定于列的键更有效。MySQL 允许每个表访问一个索引,因此当使用 WHERE x=1 和 y=2 等子句执行查询时,在x 和 y上建立索引比在整个列上建立单独的索引要好。

另外, x和y上的复合索引还可以提高后续查询的性能。

从表中选择 y,其中 x=1

MySQL 使用覆盖索引并从该索引在内存中提供y 。如果你有机会在实践中使用复合索引,你可以用它来提高性能。设计索引时,请记住索引的读取方式:始终从左到右。让我们看一下下面的查询:

从表中选择 a、b、c,其中 a=1 且 b=2

在这里,a 和 b 的索引将有助于查询。但让我们看看以下格式:

从表中选择 a、b、c,其中 b=2

索引没有用,会导致全表扫描。始终从左侧读取索引的概念也适用于其他一些情况。例如,让我们看一下以下查询:

从表中选择 a、b、c,其中 a=1 且 c=2

没有按b列过滤的WHERE 子句,因此a、b 和 c的索引将仅读取第一列。所以在这种情况下,MySQL可以部分读取索引,这比全表扫描要好,但在获得最佳查询性能方面仍然存在不足。

与查询设计相关的另一个因素是左端索引访问,这是 MySQL 中常用的优化。例如,索引a、b、c在select a,c where c=x等查询中不起作用。这是因为此查询无法跳过索引的第一部分,即a 和 b 。这同样适用于诸如select c,count(c) where a=x group by c 之类的查询。由于b的索引无法跳过,因此a、b 和 c的索引不能用于group by 。但是,有一个像select c,count(c) 这样的查询,其中 a=x 和 b=y 按 c 分组,并且此查询对a、b 和c进行过滤如果对 进行分组,则a、b、c的一个索引对于过滤和分组都有帮助 。

推荐文章

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注