我有一张包含3000万条记录的表,使用MyISAM引擎。我每隔15分钟就会有一次重复的DELETE语句来清理旧记录中的表格。
使用:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM mytable WHERE id=123;
当'删除来自mytable ...'正在运行时(需要30-60秒)。
SELECT语句是否会在没有锁定的情况下返回脏记录?或者是否会尊重表锁并等待30秒然后返回结果?有没有办法让一个MyISAM表返回SELECT查询而DELETE有一个表锁?
感谢。
答案 0 :(得分:0)
你可以用DELETE语句支持 以下修饰符:
如果指定LOW_PRIORITY,则 服务器延迟执行DELETE 直到没有其他客户正在阅读 从表中。这仅影响 仅使用的存储引擎 表级锁定(例如MyISAM, MEMORY和MERGE)。
DELETE LOW_PRIORITY FROM mytable ......