【发布时间】:2010-12-17 23:36:27
【问题描述】:
我有一个 MySQL MYISAM 表(比如 tbl),它由 2 个无符号 int 字段组成,比如 f1 和 f2。 f2 上有一个索引,并且表非常大(大约 320,000,000+ 行)。我定期更新此表(每周大约有 100,000 条新行),并且为了能够在不执行 ORDER BY 的情况下搜索此表(这在实时查询中会非常耗时),我对表进行物理排序根据我要检索其行的方式。
所以,我执行 ALTER TABLE tbl ORDER BY f1 DESC。 (我知道我在服务器上有足够的物理空间来存储表的副本。)我读到,在此操作期间,会创建一个临时表,并且 SELECT 语句不会影响当前行。
但是,我发现情况并非如此,与 ALTER 表同时发生的表上的 SELECT 语句被阻塞并且不会终止。 ALTER TABLE tbl 完成后(在生产服务器上大约 40 分钟),tbl 上的 SELECT 语句再次开始正常执行。
“ALTER table tbl ORDER BY f1 DESC”是否有任何理由阻止其他客户端查询 tbl?
【问题讨论】:
标签: mysql locking sql-order-by alter