我有一个由2个unsigned int字段组成的MySQL MYISAM表(称为tbl),比如f1和f2。在f2上有一个索引,表格非常大(大约320,000,000+行)。我定期更新此表(每周大约有100,000个新行),为了能够在不执行ORDER BY(这在实时查询中非常耗时)的情况下搜索此表,我实际对表进行了ORDER根据我想要检索其行的方式。MySQL ALTER TABLE ORDER BY f1 DESC - 这是否阻止SELECT查询?
因此,我执行一个ALTER TABLE tbl ORDER BY f1 DESC。 (我知道我在服务器上有足够的物理空间来存放表的副本)。我已经读过,在此操作期间,创建了一个临时表,并且SELECT语句在当前行上不受影响。
但是,我经历过,情况并非如此,并且在与ALTER表同时发生的表上的SELECT语句被阻止并且不终止。 ALTER TABLE tbl完成后(生产服务器上大约40分钟),tbl上的SELECT语句再次开始执行正常。
是否有任何理由为什么“ALTER表tbl ORDER BY f1 DESC”似乎阻止其他客户端查询tbl?
感谢您的评论。我将更详细地探讨InnoDB分区。 – Tim 2010-12-18 13:56:10