Почему Myisam быстрее для чтения (в основном приложения для чтения) и простых запросов?

#mysql #myisam

#mysql #myisam

Вопрос:

Я читал некоторые материалы по Mysql, блог о производительности Myysql и некоторые книги.

Говорят, что если у вас приложение, основанное в основном на чтении, вам следует использовать Myisam, поскольку оно лучше, чем Innodb. Также запросы без объединения быстрее для Myisam.

Почему так, когда он поддерживает блокировки таблиц (я полагаю, только для записи), где, поскольку Innodb имеет блокировки на уровне строк, поэтому он должен обеспечивать лучшую производительность как для чтения, так и для записи..

Я просто хочу знать, почему во всех материалах для чтения говорится, что Myisam быстрее для чтения, если ваше приложение прочитано более чем на 95%>, без каких-либо объяснений по этому поводу.

Я надеюсь, что кто-то знающий ответит без голосования и закрытия вопроса

Ответ №1:

Блокировки на уровне таблицы проверяются быстрее, но когда они существуют, они блокируют весь другой доступ к таблице. Если вы в основном читаете, то вам нужна самая быстрая проверка «Я не заблокирован», которую вы можете получить.

Блокировка на уровне строк позволяет выполнять другие операции одновременно в таблице, но их реализация и проверка обходятся дороже в пространстве / времени.

Итак, если вы выполняете 95% операций чтения в таблице (типично для большинства веб-приложений), то MyISAM выигрывает. В некоторых таблицах (таких как таблицы сеансов или таблицы отслеживания пользователей) записывается столько же, сколько и считывается, и блокировка всей таблицы при каждом обновлении может замедлить обход активного сайта.

Попробуйте протестировать это, создав «базу данных» с использованием карточек индексов для различных таблиц и смоделируйте, что происходит, когда по одному посетителю за раз проходит сайт. Затем попробуйте это с 5, 10 или 50 посетителями, которые одновременно нажимают на код. Быстро станет очевидно, что блокировка на уровне таблицы в таблице сеансов является ограничителем показа.