Есть ли разница в производительности при группировке по разным типам данных? Например, если я группирую по INT, получу ли я лучшую производительность, чем если бы я группировал по varchar?

9
richard 26 Авг 2011 в 01:15

3 ответа

Лучший ответ

Я бы сказал, что GROUP BY INT быстрее, так как проверяются только 4 байта по n байтов в поле varchar.

9
Simon Hughes 25 Авг 2011 в 21:20

Вы выбираете тип данных исключительно на основании того, как этот тип данных работает в GROUP BY? Это одни и те же данные, вы просто решаете, как хранить 123456, как INT или VARCHAR? Обращали ли вы внимание на другие факторы, такие как затраты ЦП на преобразование между числовыми и строковыми типами, когда в противном случае это могло бы не потребоваться? Дополнительная память, необходимая для хранения всей таблицы в кеше? Заголовок строки для VARCHAR с указанием длины? Как насчет затрат на хранение (например, 1234567890 принимает 4 байта как INT, а '1234567890' занимает 10 байтов + накладные расходы строки как VARCHAR)? Как насчет сжатия? Как индекс в этом столбце будет выровнен с кластеризованным индексом в таблице, что может повлиять на то, насколько полезным будет «уже сгруппированный»?

Другими словами, я бы не стал рассматривать производительность GROUP BY в пузыре.

3
Aaron Bertrand 25 Авг 2011 в 22:46

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

2
Guffa 25 Авг 2011 в 21:31