Эффективность MySQL с одинарной кавычкой - PullRequest
1 голос
/ 16 августа 2011

Я живу в Австралии, поэтому почтовые индексы состоят из четырех цифр.

В таблице с другим человеком поле почтового индекса было установлено как VARCHAR (10) - странно, я знаю !!!

Существует разница между следующими двумя запросами: Индекс = '3000' Индекс = 3000

Оба запроса выполняются, но один с кавычками выполняется на 50-80% быстрее. Аналогично, почтовый индекс IN («3000», «3001», «3002») намного быстрее, чем почтовый индекс IN (3000,3001,3002). Поле почтового индекса проиндексировано

Вопрос в том, КАК одинарные кавычки так сильно влияют на скорость?

Может ли кто-нибудь пролить свет на то, как движок оптимизирует вышеуказанные запросы?

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

В этом есть одна важная ловушка.Если вы используете что-то вроде

 code = 1000

вместо

code = '1000'

, то при наличии другого набора данных в первом случае будут возвращаться все записи, например:

 '1000', '1000A', '1000B'

и т. д., а второй вернется, как ожидается, только «1000»Это может быть причиной проблемы с производительностью.Некоторые упоминали, что он конвертирует int в varchar.Я считаю, что он конвертирует все varchars в int, и поэтому он заметен

2 голосов
/ 16 августа 2011

Если вы не включите кавычки, интерпретатору потребуется время, чтобы выполнить неявное преобразование из int в varchar.Если вы используете кавычки, это уже varchar, и это экономит время на преобразование в собственный формат хранения.

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