Лучшая производительность SQL: char (10) и trim или varchar (10) - PullRequest
1 голос
/ 15 апреля 2010

У меня есть база данных, которая использует коды. Каждый код может быть длиной от двух символов до десяти символов.

В MS SQL Server для производительности лучше использовать char(10) для этих кодов и RTRIM их по мере их поступления, или я должен использовать varchar(10) и не беспокоиться о сокращении лишних пробелов? Мне нужно избавиться от пробелов, потому что коды будут использоваться в логике приложения для сравнения, а что нет.

Что касается средней длины кода, трудно сказать точно. Предположим, что все коды имеют случайную длину от одного до десяти. Редактировать: Приблизительная оценка составляет около 4,7 символов для средней длины кода.

Ответы [ 5 ]

6 голосов
/ 15 апреля 2010

Я бы проголосовал за varchar.

Я говорю varchar, чтобы избежать TRIM, который бы лишил законной силы использование индекса (если только вы не используете вычисляемый столбец и т. Д., Что противоречит цели, нет?)* В противном случае при длине 10 это будет 50/50, но TRIM наклоняет баланс в сторону varchar и выигрывает над преимуществом фиксированной длины

3 голосов
/ 16 апреля 2010

Как правило, всегда отдавайте предпочтение меньшему объему памяти, чем дополнительному ЦП. Поскольку движущим фактором производительности базы данных всегда является IO, а меньшие записи данных означают больше записей на страницу, а это, в свою очередь, означает меньше запросов IO Дополнительный процессор, вовлеченный в обработку переменной длины, не будет фактором. Исторически, в темные 80-е и даже в 90-е годы это могло быть измеримым фактором, но сегодня это просто шум. Поскольку доступ к процессору и памяти значительно возрос, но скорость ввода-вывода осталась практически неизменной. Вот почему совет «старых книг» не применяется сегодня. Если у вас нет постоянного поля типа char (2) или аналогичного, просто всегда используйте varchar.

2 голосов
/ 15 апреля 2010

Я уверен, что вы не сможете определить разницу в скорости между ними.

1 голос
/ 15 апреля 2010

Ваши требования - определение из учебника того, кому нужно использовать varchar.

Если вы хотите беспокоиться о производительности, заботьтесь о дизайне БД и написании хорошего SQL. Внутренние компоненты Char против VarChar хорошо оптимизированы поставщиками БД.

0 голосов
/ 15 апреля 2010

В одной старой книге я читал, что в целом char - лучший выбор, когда для большинства записей реальная длина строки составляет не менее 60% от максимальной; в вашем примере - если более половины всех записей имеют длину 6 или больше. В противном случае используйте varchar.

...