Почему MySql блокирует таблицы?
SELECT * FROM table WHERE date>'' AND date<''
записей много, запрос выполняется долго и это не критично.
Вопрос, почему пока выполняется этот запрос, с таблицей ничего нельзя сделать? Все запросы на добавление и обновление становятся в очередь и ждут завершения выполнения основного запроса.
Мне все равно, будут учтены записи добавляемые/обновляемые в этот момент или нет. Может есть что-то типа SELECT IGNORE или SELECT NONBLOCK ???
По-моему вот здесь описана проблема и способы ее решения:
[quote=Доки на винте]
HIGH_PRIORITY даст SELECT более высокий приоритет, чем инструкциям, которые модифицируют таблицу. Вы должны использовать это только для запросов, которые являются очень быстрыми и должны быть выполнены сразу. Запрос SELECT HIGH_PRIORITY выполнится, если таблица блокирована для чтения, даже если имеется инструкция модификации, которая ждет таблицу.
[/quote]
c UPDATE вообще фишка :D
[quote=Те же доки, с того же винта]
Если Вы определяете ключевое слово LOW_PRIORITY, выполнение UPDATE будет отсрочено до наступления момента, когда никакие клиенты не читают из таблицы.
[/quote]
в DELETE может вот это помочь... но не уверен что ключевое слово меняет приоритет выполнения запроса.....
[quote=Опять оттуда же ;)]
Если Вы определяете слово QUICK, то драйвер таблицы не будет объединять индексные листья в течение процесса удаления, что может ускорять некоторые виды удаления.
[/quote]
если поможет, гут, а нет... а ну и фик с ним :)
DELAYED INSERT не подходит. Вот что меня заинтересовало из статьи:
Цитата:
Если имеются проблемы при выполнении команд INSERT совместно с SELECT, перейдите на новые таблицы MyISAM, которые поддерживают одновременное выполнение команд SELECT и INSERT.
Что за "новые" таблицы MyISAM ?
Цитата: mike
Сужаем задачу. Долгие SELECT + быстрые INSERT.
DELAYED INSERT не подходит. Вот что меня заинтересовало из статьи:
Что за "новые" таблицы MyISAM ?
DELAYED INSERT не подходит. Вот что меня заинтересовало из статьи:
Что за "новые" таблицы MyISAM ?
не такие уж они и "новые". как минимум с версии 3.53. наверно статья старая ) по умолчанию MySQL применяет свой собственный движок таблиц MyISAM.
Цитата: mike
Что за "новые" таблицы MyISAM ?
Вот тут(английский): http://dev.mysql.com/doc/refman/5.0/en/storage-engines.html