Spec-Zone .ru
спецификации, руководства, описания, API
|
Некоторые общие советы для того, чтобы ускорить запросы на MyISAM
таблицы:
Чтобы помочь MySQL лучше оптимизировать запросы, использовать ANALYZE TABLE
или выполненные myisamchk - анализируют на таблице после того, как она
была загружена данными. Это обновляет значение для каждого, индексируют часть, которая указывает на
среднее число строк, у которых есть то же самое значение. (Для уникальных индексов это всегда 1.) MySQL
использует это, чтобы решить, которые индексируют, чтобы выбрать, когда Вы присоединяетесь к двум
таблицам, основанным на неконстантном выражении. Можно проверить следствие табличного анализа при
использовании SHOW INDEX FROM
и исследование tbl_name
Cardinality
значение. myisamchk
- описание - многословные шоу индексирует информацию о распределении.
Чтобы сортировать индексирование и данные согласно индексированию, используйте myisamchk - вид - индексирует - sort-records=1 (предполагающий, что Вы хотите сортировать на, индексируют 1). Это - хороший способ сделать запросы быстрее, если у Вас есть уникальный индекс, из которого Вы хотите считать все строки в порядке согласно индексированию. В первый раз, когда Вы сортируете большую таблицу этот путь, может требоваться много времени.
Попытайтесь избежать комплекса SELECT
запросы на MyISAM
таблицы, которые
часто обновляются, чтобы избежать проблем с таблицей, блокирующей, которые происходят из-за конкуренции
между читателями и писателями.
MyISAM
поддерживает параллельные вставки: Если у
таблицы нет никаких свободных блоков в середине файла данных, Вы можете INSERT
новые строки в это в то же самое время, когда другие потоки
читают из таблицы. Если важно быть в состоянии сделать это, рассмотреть использование таблицы способами,
которые избегают удалять строки. Другая возможность состоит в том, чтобы работать OPTIMIZE TABLE
дефрагментировать таблицу после того, как Вы удалили
много строк от этого. Это поведение изменяется, устанавливая concurrent_insert
переменная. Можно вынудить новые строки быть
добавленными (и поэтому разрешить параллельные вставки), даже в таблицах, которые удалили строки. См. Раздел
8.10.3, "Параллельные Вставки".
Для MyISAM
таблицы, которые часто изменяются, пытаются
избежать всех столбцов переменной длины (VARCHAR
, BLOB
, и TEXT
). Таблица использует динамический формат строки, если это
включает даже единственный столбец переменной длины. См. Главу
14, Механизмы Хранения.
Обычно не полезно разделить таблицу на различные таблицы только, потому что строки
становятся большими. В доступе к строке самый большой хит производительности является поиском на диске,
должен был найти первый байт строки. После обнаружения данных самые современные диски могут считать всю
строку достаточно быстро для большинства приложений. Единственные случаи, где разделение таблицы имеет
заметное значение, - то, если это - a MyISAM
таблица используя динамический
формат строки, который можно изменить на фиксированный размер строки, или если Вы очень часто должны
сканировать таблицу, но не нуждаться в большинстве столбцов. См. Главу
14, Механизмы Хранения.
Использовать ALTER TABLE ... ORDER BY
если Вы обычно получаете строки в expr1
, expr2
,
...
порядок. При использовании этой опции после обширных изменений к таблице можно быть в
состоянии получить более высокую производительность. expr1
, expr2
,
...
Если Вы часто должны вычислять результаты, такие как количества, основанные на информации от большого количества строк, может быть предпочтительно представить новую таблицу и обновить счетчик в режиме реального времени. Обновление следующей формы очень быстро:
UPDATEtbl_name
SETcount_col
=count_col
+1 WHEREkey_col
=constant
;
Это очень важно, когда Вы используете механизмы хранения MySQL такой как MyISAM
у этого есть только блокировка на уровне таблицы (многократные читатели с единственными писателями).
Это также дает лучшую производительность с большинством систем баз данных, потому что менеджер по
блокировке строки в этом случае имеет меньше, чтобы сделать.
Использовать INSERT
DELAYED
для MyISAM
(или другие поддерживаемые нетранзакционные
таблицы), когда Вы не должны знать, когда Ваши данные пишутся. Это уменьшает полное воздействие вставки,
потому что много строк могут быть записаны с единственной записью на диск.
С MySQL 5.6.6, INSERT
DELAYED
осуждается, и будет удален в будущем выпуске. Использовать INSERT
(без DELAYED
) вместо этого.
Использовать OPTIMIZE
TABLE
периодически избегать фрагментации с динамическим форматом MyISAM
таблицы. См. Раздел
14.3.3,"MyISAM
Табличные Форматы Хранения".
Объявление a MyISAM
таблица с DELAY_KEY_WRITE=1
табличная опция делает, индексируют обновления быстрее, потому что они не сбрасываются к диску, пока
таблица не закрывается. Нижняя сторона - то, что, если что-то уничтожает сервер, в то время как такая
таблица открыта, следует гарантировать, что таблица хорошо, выполняя сервер с --myisam-recover-options
опция, или работая myisamchk прежде, чем перезапустить сервер. (Однако,
даже в этом случае, ничего недопустимо потерять при использовании DELAY_KEY_WRITE
, потому что ключевая информация может всегда быть
сгенерирована от строк данных.)
Строки являются автоматически префиксными - и пространство конца, сжатое в MyISAM
индексирует. См. Раздел
13.1.13,"CREATE INDEX
Синтаксис".
Можно увеличить производительность, кэшируя запросы или ответы в Вашем приложении, и затем выполнение многих вставляет или обновляет вместе. Блокировка таблицы во время этой работы гарантирует, что индексировать кэш только сбрасывается однажды после всех обновлений. Можно также использовать в своих интересах кэш запроса MySQL, чтобы достигнуть подобных результатов; см. Раздел 8.9.3, "MySQL Query Cache".