MySQL Update не использует индекс при использовании большого целого в кавычках в WHERE - PullRequest
7 голосов
/ 30 июля 2011

У меня большая таблица (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';

Это что-то с ОБНОВЛЕНИЕМ.

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

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Можете ли вы попробовать с этим ..

обновить BIG_TABLE как B1, BIG_TABLE как B2 установить B1.some_value = 0 где B2.id = '10000000000' И B1.ID = B2.ID;

0 голосов
/ 11 августа 2011

Спасибо за ваши ответы.

Ну, я не нашел решения со стороны MySQL.Похоже, какая-то ошибка MySQL - я изменил код, чтобы избежать вызова библиотеки Perl (которая создает запрос) с большими значениями.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...