У меня большая таблица (MyISAM) с id в качестве первичного ключа (MySQL версии 5.1.54).
Когда я выполняю следующий запрос с очень большим QUOTED целым числом в WHERE, он не использует PKИндекс и работает очень очень медленно (занимает несколько минут):
update BIG_TABLE set some_value=0 where id='10000000000';
Если я удаляю кавычки, запрос выполняется очень быстро (PK Index используется правильно).Этот работает быстро:
update BIG_TABLE set some_value=0 where id=10000000000;
Если я не использую большое целочисленное значение, запрос выполняется быстро даже с кавычками:
update BIG_TABLE set some_value=0 where id='100';
Таким образом, похоже, что MySQL не может использовать индексв столбце целых чисел, когда значение в WHERE не может быть преобразовано в целое число (слишком большое значение для целого числа).Есть ли обходной путь для этого?
Мне нужен обходной путь со стороны MySQL.Потому что этот запрос построен какой-то закрытой библиотекой Perl, которую нельзя изменить.Все аргументы WHERE заключаются в кавычки автоматически, и иногда случается, что запрос Update создается с очень большим целым числом (это недопустимое значение, поэтому я просто ожидаю, что UPDATE ничего не обновит).
В данный момент происходит запрос на обновлениевыполняется несколько минут, и это приводит к падению всей системы.
Обратите внимание, что select работает корректно даже с указанными большими целыми числами.Нет проблем с этим:
select * from BIG_TABLE where id='10000000000';
Это что-то с ОБНОВЛЕНИЕМ.
Есть идеи?Спасибо!