Обновление MySQL не использует индекс при использовании больших целых чисел в кавычках в WHERE

I есть большая таблица (MyISAM) с идентификатором в качестве первичного ключа (версия MySQL 5.1.54).

Когда я выполняю следующий запрос с очень большим целым числом QUOTED в WHERE, он не использует индекс 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';

Итак, похоже, MySQL не может использовать индекс для целочисленного столбца mn, когда значение в WHERE не может быть преобразовано в целое число (значение слишком велико для целого числа). Есть ли обходной путь для этого?

Мне нужен обходной путь со стороны MySQL. Потому что этот запрос построен какой-то закрытой библиотекой perl, которую нельзя изменить. Все аргументы WHERE цитируются автоматически, и иногда бывает, что запрос на обновление строится с очень большим целым числом (это недопустимое значение, поэтому я просто ожидаю, что UPDATE ничего не обновит).

Сейчас происходит то, что этот запрос на обновление выполняется несколько раз. минут, и это приводит к отключению всей системы.

Обратите внимание, что select работает правильно даже с большими целыми числами в кавычках. Нет проблем с этим:

select * from BIG_TABLE where id='10000000000';

Это что-то с UPDATE.

Есть идеи? Спасибо!

7
задан Dima L. 4 August 2011 в 19:44
поделиться