Производительность SQL Server: GROUP BY int против GROUP BY VARCHAR - PullRequest
8 голосов
/ 26 августа 2011

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

Ответы [ 3 ]

9 голосов
/ 26 августа 2011

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

4 голосов
/ 26 августа 2011

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

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

3 голосов
/ 26 августа 2011

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

...