Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Primary Key Int vs BigInt / 9 сообщений из 9, страница 1 из 1
25.08.2008, 07:46
    #35503775
olzhas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Primary Key Int vs BigInt
Верно ли то что при замене первичного ключа с BigInt на Int производительность вырастит в 2 раза?

На сколько полохо использовать VarChar в первичном ключе?
...
Рейтинг: 0 / 0
25.08.2008, 18:58
    #35505125
чя321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Primary Key Int vs BigInt
Производительность не вырастет в 2 раза, скорее даже упадет.
Будет хуже примерно. Производительность поиска по CHAR равна поиску по INT * 2 в степени N (число символов)
...
Рейтинг: 0 / 0
26.08.2008, 08:03
    #35505467
olzhas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Primary Key Int vs BigInt
чя321Производительность не вырастет в 2 раза, скорее даже упадет.
Будет хуже примерно. Производительность поиска по CHAR равна поиску по INT * 2 в степени N (число символов)
А можно это все обосновать?

Особенно про int и BigInt. По идее размер поля меньше, место для индекса тоже меньше соотвественно читать с диска тоже прихотися меньше? или я чегото упустил?

В документации приводится такая формула которая считает необходимое место для индекса.

(средний размер ключа индекса + 9) * количество строк * 2

Разрыв конечно не в 2 раза, но приемущество int явное.
...
Рейтинг: 0 / 0
26.08.2008, 10:02
    #35505636
Vladimir Kiselev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Primary Key Int vs BigInt
Просто любопытно, а для какой цели нужен ключ типа VARCHAR, почему нельзя, например, просто построить индекс по VARCHAR, а ключ использовать "обычный" INT или типа того.
Хотелось бы услышать обоснование, если не сложно.
...
Рейтинг: 0 / 0
26.08.2008, 14:57
    #35506576
olzhas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Primary Key Int vs BigInt
Vladimir KiselevПросто любопытно, а для какой цели нужен ключ типа VARCHAR, почему нельзя, например, просто построить индекс по VARCHAR, а ключ использовать "обычный" INT или типа того.
Хотелось бы услышать обоснование, если не сложно.
Ну это нужно было бы спросить у предыдущих разработчиков, которых сейчас нету. :)
Менять же структуру мне ни кто не даст. Да и поздно уже, слишком все завязано.
Я просто ради интереса интересуюсь во сколько бы мы выиграли в производительности, используя "Нормальные" ключи. Ну и для будущих проектов думаю пригодится.
...
Рейтинг: 0 / 0
26.08.2008, 18:10
    #35507180
Vladimir Kiselev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Primary Key Int vs BigInt
Как то видел ключи типа DECIMAL, видно переносили с DBF, да так и оставили, тяжёлое наследство прошлого. Благо хоть мы своё пишем, не удивляемся что и как.
Ключи типа VARCHAR, наверное это еще та песня.. благо никогда не пробовал )
Удачи!
...
Рейтинг: 0 / 0
27.08.2008, 08:07
    #35507668
чя31
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Primary Key Int vs BigInt
BIGInt 8 байт
INT 4 байта

Грубо говоря

Операция сравнения на 32-bit архитектуре 2 такта для BIGINT и 1 такт для INT. Правда это сущие копейки, на которые можно не обращать внимания...

То что поиск по CHAR есть поиск по INT*2(n) в институте было доказательство, сейчас уже и не вспомню. Возможо если покопаться у Кнут'a можно найти...
...
Рейтинг: 0 / 0
29.08.2008, 13:36
    #35513065
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Primary Key Int vs BigInt
olzhasЯ просто ради интереса интересуюсь во сколько бы мы выиграли в производительности, используя "Нормальные" ключи. Ну и для будущих проектов думаю пригодится.

На самом-то деле, на этот конкретный вопрос только вы сами и можете дать ответ.

Сделайте копии таблиц с оригинальной и модифицированой структурой, перепишите интересующие запросы и прогоните бенчмарки. Я думаю, двух-трёх таблиц с двумя-тремя запросами может хватить для удовлетворения любопытства. (Сравнивать лучше копию с оригинальной структурой с копией с модифицированной, а не оригинал с копией с модифицированной, чтобы не влияла кластеризация с фрагментацией).

Ширина ключа, конечно, влияет, но таблицы-то не только из ключей состоят. Для достаточно широкой таблицы разница может оказаться невелика. Умозрительным рассуждениям грош цена без конкретных тестов.
...
Рейтинг: 0 / 0
08.10.2008, 10:10
    #35582201
olzhas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Primary Key Int vs BigInt
Провел я тесты. Для интереса взял 4 поля (int,bigint,char(8),varchar(8)), создал на каждое поле по индексу.
Заполнил данными от 1 до 500000. На всякий случай реорганизовал. Посчитал статистику.

Вот какие результаты
Код: plaintext
1.
2.
3.
Сканирование индекса по полю int =  1985 
Сканирование индекса по полю bigint =  2480 
Сканирование индекса по полю char =  2480 
Сканирование индекса по полю varchar =  2960 

Размеры объектов в страницах по 4кб

Код: plaintext
1.
2.
3.
индекс по полю int =  1755 
индекс по полю bigint =  2128 
индекс по полю char =  2128 
индекс по полю varchar =  2605 

Какие выводы.
Процессорное время на сканирование индекса у всех практически одинаковое, поэтому основное влияние на производительность влияет размер поля и соответственно от него размер индекса.

Использовать char очень даже можно. Все зависит от размера поля.
VarChar стоит дороже так как он добавляет конец строки. Однако если сравнивать varchar(30) и char(30) (при тоже заполняемости от 1 до 500000) то varchar выигрывает.

все это относится к полному сканированию индеска, если использовать предикат то разницы практически никакой. т.к. читаются только несколько страниц.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Primary Key Int vs BigInt / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]