Я нахожусь в процессе составления таблицы, и это заставило меня задаться вопросом.
Если я храню, говорю автомобили, который имеет делание (fx BMW, ect Audi.), будет он иметь любое значение на скорости запроса, если я сохраню делание как интервал или varchar.
Так
SELECT * FROM table WHERE make = 5 AND ...;
Быстрее/медленнее, чем
SELECT * FROM table WHERE make = 'audi' AND ...;
или скорость будет более или менее тем же?
Сравнение Int выполняется быстрее, чем сравнение varchar, из-за того простого факта, что int занимают гораздо меньше места, чем varchars.
Это верно как для неиндексированного, так и для индексированного доступа. Самый быстрый способ - это индексированный столбец типа int.
Как я вижу, вы отметили вопрос postgreql, возможно, вас заинтересует использование пространства для разных типов дат:
int
поля занимают между 2 и 8 байтами , с 4 обычно более чем достаточно (от -2147483648 до +2147483647) Это будет немного быстрее, если использовать int вместо varchar. Более важным для скорости является наличие индекса в поле, которое запрос может использовать для поиска записей.
Есть еще одна причина использовать int - нормализовать базу данных. Вместо того чтобы хранить в таблице тысячи раз текст Mercedes-Benz, вы должны сохранить его идентификатор, а название бренда - один раз в отдельной таблице.
Индекс или нет, int равно намного быстрее (чем длиннее varchar, тем медленнее он работает).
Другая причина: индекс для поля varchar будет намного больше, чем для int. Для больших таблиц это может означать сотни мегабайт (и тысячи страниц). Это значительно ухудшает производительность, поскольку для чтения одного только индекса требуется много операций чтения с диска.
Обычно int будет быстрее. Чем длиннее varchar, тем медленнее он работает
Подсказка: Если возможные значения для поля make будут никогда (или редко) меняться, вы можете использовать ENUM в качестве компромисса. Он сочетает в себе хорошую скорость и удобочитаемость.
Если вы включите индексирование на любом полей, будет быстрее. Что касается вашего вопроса, я думаю, что int
быстрее, чем varchar
.