理解MySQL解释,`行`明智

时间:2014-04-21 08:32:57

标签: mysql performance optimization

我正在试图弄清楚如何考虑MySQL rows输出的explain列。以下是MySQL documentation对此的说法:

  

rows列表示MySQL认为必须的行数   检查以执行查询。

所以这是我的问题:

  1. 无论其准确性如何,这是在使用指数之前或之前要检查的记录数量吗?
  2. 我是否需要重视具有高rows的表格的优化?
  3. MySQL检查的记录总数是rows列的产品吗?
  4. 有哪些策略可以减少rows

1 个答案:

答案 0 :(得分:7)

  1. 索引的含义是 - DBMS将首先看到 ,然后使用收集的信息查找匹配的行。所以 - 是的,rows将指示在使用索引之后将检查多少行(如果它们存在且当然适用)。这个问题意味着您对哪些索引感到困惑。他们不是一些魔术,他们只是真正的数据结构。它们的全部意义在于减少用于执行查询的数据行数。
  2. 有争议。这个问题无法回答"是"或"不"。因为不同的表可能具有不同的行定义 - 并且应用的操作也会不同。想象一下,第一个表格中有100.000行,第二个表格中有10.000行。但对于第一张桌子,你只选择普通值,而第二张桌子就像标准偏差一样。那就是:不仅重要的行数,而且你用它们做什么。
  3. 您可能会认为这是乘法,是的。但问题是 - 它不会完全会发生什么。当然,并不完全相同。还有filtered字段表示许多行受应用条件影响(如WHERE子句中所示)。但是 - 通常情况下,您可以将最终结果估算为10的幂,即如果您在第一行中有123.456.789行而在第二行中有111.222行,则可以将其视为"选择大约1E8 x 1E5"行。
  4. 这些技术非常标准,它们都是关于查询的优化。第一步是查看how MySQL optimizes查询的某些部分。并非所有查询都可以进行优化 - 通常它是一个过于宽泛的问题,因为某些解决方案可能涉及整个数据库和/或应用程序结构。但是,了解如何正确使用索引,索引什么(以及什么不可能),如何创建有效索引 - 就足够了。