Как я могу ускорить запросы INNODB, сопоставимые с производительностью MYISAM? - PullRequest
3 голосов
/ 21 января 2011

Я недавно переключил свои таблицы базы данных с MYISAM на INNODB , и у меня плохие тайм-ауты с запросами, в основном вставками.Одна функция, которую я использовал ранее, занимала <2 секунды, чтобы вставить, удалить и обновить большую коллекцию записей в ~ 30 таблицах MYISAM, но теперь, когда они INNODB, функция вызывает тайм-аут PHP. </p>

Тайм-аут был установлендо 60 секунд.Я достаточно оптимизировал свой сценарий, и теперь, несмотря на то, что запросов по-прежнему много, они объединяются (несколько вставок, несколько удалений и т. Д.), И сценарий теперь занимает ~ 25 секунд, что существенно больше, чем казалось приминимум 60 секунд.

Эта длительность все еще более чем в 10 раз быстрее при использовании MYISAM. Могут ли быть какие-либо ошибки в обработке этих запросов?Или есть какие-то настройки, которые могут помочь в производительности?В настоящее время MySQL использует параметры установки по умолчанию.

В запросах нет ничего особенного, DELETE ... WHERE ... простая логика, то же самое с запросами INSERT и UPDATE.

Ответы [ 3 ]

2 голосов
/ 21 января 2011

Трудно сказать, не зная слишком много о вашей среде, но это может быть больше проблемой настройки базы данных. InnoDB может быть ОЧЕНЬ медленным на бюджетном оборудовании, где каждая запись вызывает настоящий сброс. (Это влияет на запись, а не на чтение.)

Например, вы можете прочитать о таких опциях, как:

innodb_flush_log_at_trx_commit=2
sync_binlog=0

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

Если потеря данных - это то, с чем вы абсолютно не можете жить, тогда другой вариант - использовать лучшее оборудование.

1 голос
/ 21 января 2011

Выполнить explain для каждого запроса.То есть, если медленный запрос - select foo from bar;, запустите explain select foo from bar;.

. Изучите план и добавьте при необходимости индексы.Перезапустите объяснение и убедитесь, что индексы используются.

0 голосов
/ 21 января 2011

Innodb создает хеш-индексы, которые помогают ускорить поиск по индексам, передавая индекс BTREE и используя хеш, что быстрее

...