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.
Есть идеи? Спасибо!