У меня есть таблица MySQL MYISAM (скажем, tbl), состоящая из 2 беззнаковых целых полей, скажем, f1 и f2.На f2 есть индекс, и таблица очень большая (приблизительно 320 000 000+ строк).Я периодически обновляю эту таблицу (с примерно 100 000 новых строк в неделю), и, чтобы иметь возможность искать эту таблицу без выполнения ORDER BY (который будет очень трудоемким в запросах в реальном времени), я физически ЗАКАЗЫВАЮ таблицув соответствии с тем, как я хочу получить его строки.
Итак, я выполняю ALTER TABLE tBL ORDER BY f1 DESC.(Я знаю, что у меня достаточно физического пространства на сервере для копии таблицы.) Я прочитал, что во время этой операции создается временная таблица и операторы SELECT не влияют на текущие строки.
Однако я обнаружил, что это не так, и операторы SELECT в таблице, которые происходят одновременно с таблицей ALTER, блокируются и не завершаются.После завершения ALTER TABLE tbl (около 40 минут на производственном сервере) операторы SELECT на tbl снова начинают нормально работать.
Есть ли какая-то причина, по которой «ALTER table tbl ORDER BY f1 DESC» выглядитблокирование других клиентов от запроса tbl?