Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
ConstPK
Guest
Сабж. Нужно создать таблицу, в которой будут храниться некие константы. В плане читабельности кода, где будет использоваться эта таблица, было бы предпочтительнее обращаться к константам по имени (тип varchar(20)), которое уникально, и вполне кандидат на роль PK - но вот думаю, а не будет ли выборка по такому PK медленнее, чем если бы PK был на основе поля int? Таблица будет участвовать в достаточно критичных к быстродействию запросах, и данный момент существенен для меня. Сама таблица будет небольшой - от силы полсотни записей. Спасибо.
20 янв 16, 17:53    [18707541]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Glory
Member

Откуда:
Сообщений: 104760
ConstPK
Сама таблица будет небольшой - от силы полсотни записей.

на таком количестве вы просто не заметите разницы мжеду 4байтами int и 20ю байтами(и то в максимуме) varchar
20 янв 16, 17:56    [18707564]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
ConstPK
Таблица будет участвовать в достаточно критичных к быстродействию запросах



Если вы будете джойниться на эту таблицу, то разница будет, даже если таблица небольшая.

Чем меньше размер ключа, тем меньше индекс, тем быстрее в нем поиск.

Но как говориться, что за критичные запросы у вас будут?
20 янв 16, 20:33    [18707981]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
ConstPK
Таблица будет участвовать в достаточно критичных к быстродействию запросах, и данный момент существенен для меня. Сама таблица будет небольшой - от силы полсотни записей.
Наверное, на эту таблицу будут ссылки из других, больших, таблиц, а эта как бы справочник?

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

Заметна разница или нет - это уже зависит от ваших запросов и данных.
20 янв 16, 21:36    [18708154]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7374
ConstPK,

Сделайте таблицу с двумя полями:

id - INTEGER PRIMARY KEY,
CONSTANTA - VARCHAR(20) UNIQUE KEY

и будет вам счастье.
20 янв 16, 21:45    [18708167]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
o-o
Guest
a_voronin
ConstPK
Таблица будет участвовать в достаточно критичных к быстродействию запросах



Если вы будете джойниться на эту таблицу, то разница будет, даже если таблица небольшая.

Чем меньше размер ключа, тем меньше индекс, тем быстрее в нем поиск.

Но как говориться, что за критичные запросы у вас будут?

у него 500 строк.
это индекс в 2 уровня, листовой и корневой.
хоть с одним ключом, хоть с другим.
и поиск в нем заключается в просмотре одного лишь корня,
дальше уже сразу лист, т.е. данные.

а если скан, то тем более все равно.
листья у него одинаково займут при любом ключе
20 янв 16, 21:54    [18708187]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Glory
Member

Откуда:
Сообщений: 104760
o-o
у него 500 строк.

"таблица будет небольшой - от силы полсотни записей" - у него 50 строк
20 янв 16, 22:15    [18708202]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
А на эту таблицу ссылается например милионник по чар 20? И разницы не будет?
20 янв 16, 23:43    [18708420]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
o-o
Guest
Glory
o-o
у него 500 строк.

"таблица будет небольшой - от силы полсотни записей" - у него 50 строк

да. интересное у меня понятие о сотне под вечер
21 янв 16, 00:01    [18708479]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
o-o
Guest
Mike_za
А на эту таблицу ссылается например милионник по чар 20? И разницы не будет?

ну вот пусть и рассказывает все.
а то пока по описанию он собрался "обращаться к константам по имени" и только
21 янв 16, 00:06    [18708490]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
ConstPK
Guest
o-o
Mike_za
А на эту таблицу ссылается например милионник по чар 20? И разницы не будет?

ну вот пусть и рассказывает все.
а то пока по описанию он собрался "обращаться к константам по имени" и только

Рассказываю. Непосредственного джойна таблицы констант с миллионником не будет. Таблица будет использоваться примерно так:
create table dbo.Consts (
  name varchar(20) not null primary key,
  value int
)
go
create function dbo.uf_GetConst(@name varchar(20))
returns table
with schemabinding
as return
select value from dbo.Consts where name=@name
go

и (схематично)
select
  ...
from dbo.TableA a
cross apply dbo.uf_GetConst('SomeConst') f
join dbo.TableB b on b.const=f.value and b.n=a.n
21 янв 16, 06:42    [18708775]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Alibek B.
Member

Откуда:
Сообщений: 3631
ConstPK
Непосредственного джойна таблицы констант с миллионником не будет.

Это не так важно.
Даже если джойна не будет, все равно в таблице с большим числом записей будет FK.
Если этот FK будет int, это одно, если будет varchar, это другое.
21 янв 16, 09:30    [18709027]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alibek B.
Даже если джойна не будет, все равно в таблице с большим числом записей будет FK.

Откуда вы все берете вторую большую таблицу с FK ?
21 янв 16, 09:31    [18709029]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alibek B.
Если этот FK будет int, это одно, если будет varchar, это другое.

А int лучше varchar(4) ?
21 янв 16, 09:32    [18709030]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Alibek B.
Member

Откуда:
Сообщений: 3631
Glory
Откуда вы все берете вторую большую таблицу с FK ?

Ну обычно FK все же бывает.
Не хардкодить же имена констант в тексте запроса.

Glory
А int лучше varchar(4) ?

Думаю что лучше, даже если размер занимают одинаковый.
Но в сабже varchar(20).
21 янв 16, 09:44    [18709067]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alibek B.
Ну обычно FK все же бывает.
Не хардкодить же имена констант в тексте запроса.

"Рассказываю. Непосредственного джойна таблицы констант с миллионником не будет. Таблица будет использоваться примерно так:
...
cross apply dbo.uf_GetConst('SomeConst') f"

Alibek B.
Думаю что лучше, даже если размер занимают одинаковый.
Но в сабже varchar(20).

И что varchar(20) занимает всегда 20 байт что ли ?
21 янв 16, 09:46    [18709074]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Alibek B.
Member

Откуда:
Сообщений: 3631
Сравнить два фиксированных 4-байтных слова всегда можно эффективнее, чем два набора данных произвольной длины.
21 янв 16, 10:10    [18709143]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Glory
И что varchar(20) занимает всегда 20 байт что ли ?

Нет, не всегда. Иногда оно занимает 22 байта.
А вот вачар 4 - займет от 2х до 6ти.
И если каждый код будет содержать хотя бы 3 символа, то это уже хуже чем 4 байта инта.
21 янв 16, 10:16    [18709167]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alibek B.
Сравнить два фиксированных 4-байтных слова всегда можно эффективнее, чем два набора данных произвольной длины.

Вы о чем ?
О запросе
select value from dbo.Consts where name=@name
где поле/переменная name может быть int или varchar(20) при 50ти записях ?
И сколько времени вы прогнозируете выиграть на "эффективном" сравнении ?
21 янв 16, 10:17    [18709170]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mike_za
Нет, не всегда. Иногда оно занимает 22 байта.
А вот вачар 4 - займет от 2х до 6ти.
И если каждый код будет содержать хотя бы 3 символа, то это уже хуже чем 4 байта инта.

Моежт вы тогда точно скажите, сколько времени вы выиграете для запроса вида select value from dbo.Consts where name=@name ?
21 янв 16, 10:20    [18709176]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Glory,

Просто вы дважды упомянули 20 как максимум.
21 янв 16, 10:34    [18709225]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
ConstPK
и (схематично)
select
  ...
from dbo.TableA a
cross apply dbo.uf_GetConst('SomeConst') f
join dbo.TableB b on b.const=f.value and b.n=a.n


А тут разве TableB не содержит поле с кодом константы? В ней тоже 50 записей, или это не джоин?
21 янв 16, 10:39    [18709251]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mike_za
Просто вы дважды упомянули 20 как максимум.

Потому что все равно под 50 записей будет выделено _целое число страниц_.
А не байт, которые вы так скурпулезно подсчитываете. И вы память будут загружаться тоже страницы.

Сообщение было отредактировано: 21 янв 16, 10:40
21 янв 16, 10:39    [18709254]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Mike_za,

А все, ощибся
21 янв 16, 10:40    [18709255]     Ответить | Цитировать Сообщить модератору
 Re: Влияет ли на скорость выборки тип данных поля PRIMARY KEY?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Т.е. сравнение строк в 4 байте работает не медленнее сравнения целых чисел на аппаратном уровне? Если правильно помню, сравнение чисел выполняется за один такт с учетом предвыборки.
21 янв 16, 11:14    [18709460]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить