Это частично объясняется в документации по объяснению :
Столбец строк указывает число строк, MySQL считает, что его необходимо проверить для выполнения запроса.
Для таблиц InnoDB это число является приблизительным и не всегда может быть точным.
Я считаю, что причина в том, что explain
берет значение из столбца INFORMATION_SCHEMA.TABLES.TABLE_ROWS
. Документация дополнительно подчеркивает:
TABLE_ROWS
Количество строк. Некоторые механизмы хранения, такие как MyISAM, хранят точное количество. Для других механизмов хранения, таких как InnoDB, это значение является приблизительным и может отличаться от фактического значения на целых 40-50%. В таких случаях используйте SELECT COUNT (*) для получения точного подсчета.
Другими словами, когда вы используете SELECT COUNT(*)
, MySQL генерирует один и тот же план запроса независимо от механизма хранения. Если вы знаете, что использовать INFORMATION_SCHEMA.TABLES
безопасно, то вы можете использовать это значение - либо потому, что вы не используете InnoDB, либо потому, что приблизительное значение достаточно хорошее.