В состоянии MYSQL значение Handler_read_rnd_next очень высокое.
Мне известно, что это значение будет увеличиваться при выполнении запроса, который не имеет надлежащих индексов.
Но даже когда мы выполняем шоу-статус, такой как 'Handler_read_rnd_next', это значение увеличивается на 2.
Основываясь на этом флаге состояния, мы отслеживаем некоторые статистические данные.
Так что каждый раз эта статистика показывает критическую.
Можем ли мы исключить эти подсчеты выполнения 'show' из подсчета 'Handler_read_rnd_next'.
Еще один пример для этого,
Есть таблица с 10 строками, таблица индексируется по столбцу «данные», и если мы выполним следующий запрос:
select data from test where data = 'vwx' -> returns one row
и если мы проверим значение Handler_read_rnd_next, оно будет увеличено на 7.
Ниже приведен результат команды объяснения для вышеуказанного запроса:
explain select data from test where data = 'vwx';
id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, 'SIMPLE', 'test', 'ref', 'data', 'data', '35', 'const', 1, 'Using where; Using index'
Есть ли способ ограничить это значение, или я могу знать, почему это значение очень быстро увеличивается.
источник
Ответы:
Прежде всего, давайте посмотрим на определение Handler_read_rnd_next.
Согласно документации MySQL на Handler_read_rnd_next:
Теперь посмотрите на ваш запрос:
Вы сказали, что в таблице 10 строк. Как показывает практика, MySQL Query Optimizer не будет использовать индекс, если число строк, которое необходимо изучить, превышает 5% от общего числа строк.
Давайте посчитаем. 5% из 10 строк - это 0,5 строки. Даже если количество строк, необходимых для поиска ваших данных, равно 1, это больше, чем 0,5. На основании этого меньшего числа строк и правила индекса, которое я только что упомянул, MySQL Query Optimizer всегда будет выполнять сканирование таблицы.
Поскольку сам столбец
data
индексируется, вместо сканирования таблицы mysql выполнял сканирование индекса.Если вы точно знаете, что тестовая таблица никогда не будет расти, вы можете удалить все индексы и разрешить сканирование таблицы. Переменные состояния обработчика должны перестать увеличиваться.
источник
Какая версия MySQL?
Причины, по которым этот флаг увеличивается, лучше всего задокументировать здесь: http://www.mysqlperformanceblog.com/2010/06/15/what-does-handler_read_rnd-mean/
Короче говоря, это просто счетчик количества строк, выбранных по порядку во время полного или частичного сканирования таблицы.
Теперь, что сказал, я получаю другой результат:
источник
Если в столбце «data» имеется уникальный / первичный индекс, то вы уже выполнили оптимизацию для этого запроса. Я не могу думать, что дальнейшая оптимизация может быть сделана на этом.
Также вы можете проверить, был ли выполнен FULL TABLE SCAN или нет?
Убедитесь, что select_scan не увеличил свое значение. Таким образом, вы можете проверить, выполняется ли FULL TABLE SCAN или нет. Вы должны попытаться оптимизировать запрос, который не будет выполнять FULL TABLE SCAN.
источник