объединяет в ints против объединяет в chars (или varchars) - PullRequest
6 голосов
/ 26 февраля 2009

Есть ли какие-либо недостатки в производительности SQL при присоединении таблицы к значению типа char (или varchar), а не к объединению целочисленного значения?

Ответы [ 5 ]

4 голосов
/ 26 февраля 2009

Присоединение к типу char или var char обычно имеет накладные расходы, а не присоединяется к int. При сравнении символов мне известны два фактора:
- сопоставление должно быть учтено
- в полях char есть больше данных для сравнения *

* (каждый символ представлен 8 битами, поэтому длина 10 символов равна 80 битам по сравнению с 32 битами для целого числа)

* (это 16 бит на символ при использовании NCHAR или NVARCHAR)

2 голосов
/ 26 февраля 2009

Существуют соображения производительности , связанные с размером столбца объединения. Целое число имеет ширину 4 байта - поэтому любое значение символа, превышающее 4 байта, требует большего дискового ввода-вывода, места в кэше и т. Д. Очевидно, что char (5) не сильно повлияет, но char (4000) будет чрезвычайно расточительным , Удвойте размеры символов, если вы используете типы Unicode.

Обычно этот вопрос возникает в контексте естественных против суррогатных ключей. В этом аргументе размер типа данных не является единственным фактором - так как вы часто можете избежать объединения с натуральным (char) ключом.

Конечно, ни один из них не может быть узким местом в вашем приложении - поэтому проектируйте безнаказанно (по крайней мере, в этой области).

1 голос
/ 26 февраля 2009

Символ или varchar будут сохранены как ASCII или Unicode, в зависимости от вашего набора символов. Int будет храниться в виде упакованной формы. Если вы возьмете число в форме int, оно будет меньше, чем то же число в форме символа (строки). Хранение в виде числовых типов всегда будет более производительным, чем хранение в виде символов.

1 голос
/ 26 февраля 2009

Нет, нет (в Oracle). Что может изменить ситуацию:
- Если типы данных в вашем условии соединения отличаются (неявное преобразование может привести к снижению производительности). Так что присоединение полукокса к варчару может быть плохим.
- Если одно поле имеет индекс, а другое нет.
- Если данные в одном столбце намного длиннее, чем в другом столбце.

0 голосов
/ 26 февраля 2009

Нет, пока типы данных между таблицами, к которым вы присоединяетесь, одинаковы, все будет в порядке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...