我有一个大表(MyISAM),其id为主键(MySQL版本5.1.54)。
当我在WHERE中使用非常大的QUOTED整数执行以下查询时,它不使用PK索引并且运行速度非常慢(需要几分钟才能完成):
update BIG_TABLE set some_value=0 where id='10000000000';
如果我删除引号,查询运行速度非常快(正确使用PK索引)。这个跑得很快:
update BIG_TABLE set some_value=0 where id=10000000000;
如果我不使用大整数值,即使使用引号,查询也会快速运行:
update BIG_TABLE set some_value=0 where id='100';
因此,当WHERE中的值无法转换为整数(整数值太大)时,看起来MySQL无法在整数列上使用索引。有没有解决方法呢?
我需要MySQL方面的解决方法。因为此查询是由一些封闭的perl库构建的,无法更改。所有WHERE参数都是自动引用的,有时会发生Update查询是用非常大的整数构建的(这是非法的值,所以我只希望UPDATE不更新任何东西)。
现在发生的事情是,这个更新查询会在几分钟内完成,并且会导致整个系统崩溃。
请注意,即使引用了大整数,select也能正常工作。没问题:
select * from BIG_TABLE where id='10000000000';
这是UPDATE的内容。
有什么想法吗? 谢谢!
答案 0 :(得分:1)
你可以试试这个..
将BIG_TABLE更新为B1,BIG_TABLE更新为B2 设置B1.some_value = 0 其中B2.id ='10000000000'和B1.ID = B2.ID;
答案 1 :(得分:0)
感谢您的回答。
好吧,我没有找到MySQL方面的解决方案。它看起来像是一些MySQL错误 - 我所做的是更改代码以避免使用大值调用Perl库(构建查询)。
谢谢!