10bet网址
MySQL 8.0参考手册
相关文件10bet官方网站 本手册下载 本手册摘录

MySQL 8.0参考手册/.../ Innodb和Myisam指数统计收集

8.3.8 InnoDB和MyISAM索引统计

存储引擎收集有关优化器使用的表的统计信息。表统计信息基于值组,其中值组是具有相同密钥前缀值的一组行。对于优化器目的,重要统计学是平均值组大小。

MySQL使用组大小的平均值有以下几种方式:

  • 估计每个必须读取多少行裁判访问

  • 估计部分连接生成的行数量,即表单的操作产生的行数

    (...) 加入tbl_name.tbl_name.关键expr

随着索引的平均值组大小的增加,索引对这两个目的的索引不太有用,因为每个查找的平均行数增加:对于索引有利于优化目的,每个索引值都是较小的表中的行数。当给定索引值产生大量行时,索引不太有用,MySQL不太可能使用它。

平均值组大小与表基数有关,这是价值组的数量。的显示索引语句显示基于的基数值N / S., 在哪里N表中的行数是多少年代是组大小的平均值。该比率在表中产生一个值组的近似数目。

基于此加入<=>比较运算符,与其他价值观没有区别对待:空< = > NULL,就像N<=>N对于任何其他人N

但是,对于基于操作员,与非 - 不同价值观:Expr1.Expr2.不是真的Expr1.Expr2.(或两者)是.这影响到裁判表单比较的访问tbl_name.keyexpr: MySQL不访问表如果当前值expr,因为比较不能是真的。

比较起来,有多少并不重要值位于表中。为了优化目的,相关价值是非的平均大小值组。然而,MySQL目前不允许收集或使用平均大小。

InnoDBMyISAM表格,您可以通过以下方式进行一些控制表统计信息innodb_stats_methodmyisam_stats_method分别系统变量。这些变量有三种可能的值,它们的区别如下:

  • 当变量设置为时nulls_equal,所有值被视为相同的(即,它们都形成单个值组)。

    如果是价值组规模远高于非均值值组大小,此方法偏斜平均值组大小向上。这使得索引出现在优化器上的用途,它比实际适用于寻找非的加入值。因此,nulls_equal方法可能导致优化器不使用裁判应该访问它的时候。

  • 当变量设置为时nulls_unequal.价值观不被认为是相同的。相反,每个Value组成大小为1的单独值组。

    如果你有很多值,此方法使平均值组大小向下偏斜。如果平均值值组规模大,计数每个值作为一组大小为1的值会导致优化器高估寻找non-的连接的索引值值。因此,nulls_unequal.方法可能导致优化器使用此索引裁判当其他方法可能更好时查找。

  • 当变量设置为时nulls_iquored值忽略。

如果您倾向于使用许多连接使用<=>而不是价值观并不特殊比较和一个等于另一个。在这种情况下,nulls_equal是适当的统计方法。

innodb_stats_method系统变量具有全局值;的myisam_stats_method系统变量有全局值和会话值。设置全局值会影响从相应存储引擎收集表的统计信息。设置会话值只影响当前客户端连接的统计信息收集。这意味着您可以强制使用给定的方法重新生成表的统计信息,而不影响其他客户端,方法是将会话值设置为myisam_stats_method

重新生成MyISAM表统计,可以使用以下任何一种方法:

一些关于使用的警告innodb_stats_methodmyisam_stats_method

  • 可以强制显式地收集表统计信息,如前所述。然而,MySQL也可以自动收集统计数据。例如,如果在执行表语句的过程中,其中一些语句修改了表,MySQL可能会收集统计信息。(这可能发生在批量插入或删除,或其他情况下ALTER TABLE语句,例如)。如果发生这种情况,则使用任何值收集统计信息innodb_stats_methodmyisam_stats_method已经在那个时候。因此,如果您使用一种方法收集统计信息,但是当稍后自动收集表的统计信息时,系统变量被设置为另一种方法,那么将使用另一种方法。

  • 没有办法判断哪种方法用于为给定表生成统计信息。

  • 这些变量仅适用于InnoDBMyISAM表。其他存储引擎只有一种收集表统计信息的方法。通常它更接近nulls_equal方法。