f1 と f2 などの 2 つの unsigned int フィールドで構成される MySQL MYISAM テーブル (tbl など) があります。f2 にインデックスがあり、テーブルが非常に大きい (約 320,000,000 行以上)。このテーブルを定期的に (1 週間に約 100,000 行で) 更新し、ORDER BY (リアルタイム クエリでは非常に時間がかかる) を実行せずにこのテーブルを検索できるようにするために、テーブルを物理的に ORDER します。行を取得する方法に応じて。
そこで、ALTER TABLE tbl ORDER BY f1 DESC を実行します。(サーバー上にテーブルのコピー用の十分な物理スペースがあることはわかっています。)この操作中に一時テーブルが作成され、SELECT ステートメントが現在の行に影響を与えないことを読みました。
ただし、これは事実ではなく、ALTER テーブルと同時に発生するテーブルの SELECT ステートメントがブロックされ、終了しないことを経験しました。ALTER TABLE tbl が完了すると (本番サーバーで約 40 分)、tbl の SELECT ステートメントが再び正常に実行されます。
「ALTER table tbl ORDER BY f1 DESC」が他のクライアントによる tbl のクエリをブロックしているように見える理由はありますか?