2009-03-25 6 views
3

У меня такая ситуация:MySQL - одновременные ВЫБОРЫ - один клиент ждет другого?

У меня есть база данных с таблицей MyISAM размером около 4 миллионов строк. Я использую хранимые процедуры (MySQL Version 5.1) и, в частности, для поиска по этим строкам по различным критериям. В этой таблице указано несколько индексов, и запросы через эту хранимую процедуру обычно очень быстрые (< 1s). В основном я использую подготовленный оператор и создаю и выполняю некоторый динамический SQL в этом поиске sp. После выполнения подготовленного заявления я выполняю команду «DEALLOCATE PREPARED stmt»;

Большинство запросов выполняются под вторым (я использую LIMIT для получения всего 15 строк в любое время). Однако есть некоторые редкие запросы, которые занимают больше времени (скажем, 2-3 секунды). Насколько я могу оптимизировать таблицу поиска.

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

Однако, если я открываю два экземпляра браузера и выполняю одновременный поиск (против машины разработки), один с более длинным запросом, а другой с более быстрым запросом, результаты возвращаются в одно и то же время, то есть похоже, что быстрый запрос ожидает завершения более медленного запроса перед возвратом результатов. то есть оба запроса будут занимать 2-3 секунды ...

Есть ли причина для этого? Поскольку я думал, что MyISAM обрабатывает SELECTS независимо друг от друга, и в настоящее время это не то поведение, которое я испытываю ...

Заранее благодарен! Tim

ответ

0

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

+0

Может быть, причина! Я еще не пробовал это с разных машин, но я полагаю, что ты прав! Благодаря! – TMM

0

Это правильно. Каждый запрос select на таблице MyISAM блокирует всю таблицу до ее завершения. Их оправдание состоит в том, что это обеспечивает «очень высокую пропускную способность чтения». Переключение на innoDB позволит одновременное чтение.

+2

Я бы хотел увидеть ссылку на эту претензию. Что я могу сделать из [руководства MySQL] (http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html) одновременных отборов ** не ** блокировать друг друга (они приобретают блокировка чтения). – andri

Смежные вопросы