2013-09-26 3 views
0

мне нужно выбирать между VARCHAR и INT в многие ко многимMysql IN (VARCHAR) против IN (INT)

Это быстрее сделать IN('1','21','311') или IN(1,21,311) в Mysql?

+1

В общем, mysql работает быстрее при работе с целыми числами. – Mihai

+1

проверить это: http://stackoverflow.com/questions/2346920/sql-select-speed-int-vs-varchar – aldanux

+1

Не используйте 'IN()' путем идентификации отношения вообще. Используйте 'EXISTS()'. В любом случае используйте идентификаторы внешнего ключа (целые числа). – DanFromGermany

ответ

1

Вы можете использовать целые числа по возможности, так как их представление является фиксированной длиной, по четыре байта по умолчанию, а сравнения выполняются с помощью одной операции. Индексирование и сравнение строк всегда дороже, но чем длиннее строки, тем больше разница.

В вашем примере здесь, где используются тривиально небольшие числа, они могут работать примерно одинаково. Однако с реальными цифрами, имеющими шесть или семь цифр, вы увидите гораздо большую разницу.

+0

Спасибо, а как насчет разницы между ** IN ** и ** EXISTS **, ранее упомянутой DanFromGermany в комментариях? – RafaSashi

+1

Я видел только «СУЩЕСТВУЮЩИЕ», используемые с [подзапросами] (http://dev.mysql.com/doc/refman/5.5/en/exists-and-not-exists-subqueries.html), а не фиксированные списки. – tadman