MySql查询对其他操作没有影响

时间:2015-08-10 02:13:25

标签: mysql sql performance

我有一个巨大的(设计不佳的)InnoDB表,有数百万条记录。当我查询这个人时,执行持续几分钟。如何确保在此期间不会影响其他操作(查询,插入或更新)?我想要的最后一件事是在我的查询运行时死机或超时。

这是实际的查询..

SELECT html FROM cms_log where class_name ='main_pages' order by date_created desc;

现在该字段' class_name'没有索引,但这不是我现在可以改变的东西。

This post建议使用

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

在运行我的查询之前。但这是一个相当古老的帖子,它只谈锁。有人可以确认这是可行的方法或提供更好的方法来运行最无害的查询吗? (我也不在乎脏读和幻影,我只是不想影响其他操作)。

2 个答案:

答案 0 :(得分:1)

所以看起来这是要走的路..

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

在执行此长查询时,在查询之前执行此操作似乎确保没有其他操作获得可怕的“超过锁定等待超时”。

答案 1 :(得分:0)

我不同意您发布的链接。将隔离级别设置为READ UNCOMMITTED不应该使您的选择查询更快/以不同方式影响任何其他查询。

像InnoDB中的纯粹选择不应该锁定任何东西(除了它们自己的内部数据结构)。

通常,SELECT可以锁定read,write或none。取决于具体情况。在这种情况下,如果您没有明确请求锁定,并且您没有更新任何内容,则不应使用行锁定。

这假设您通常运行READ COMMITTED或REPEATABLE READ隔离级别。