Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Порядок следования полей в составном PK  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
Важен ли?
19 мар 15, 11:11    [17404061]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
Glory
Member

Откуда:
Сообщений: 104760
waszkiewicz
Важен ли?

Для кого/чего ?
19 мар 15, 11:13    [17404069]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Важен!
19 мар 15, 11:18    [17404108]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
iap
Важен!

ну например, есть сферический составной PK в вакууме
Поставщик;Товар;ДатаПоставки

Для ускорения выборки не стоит ли поля ДатаПоставки и Поставщик поменять местами?
19 мар 15, 11:22    [17404130]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
Glory
Member

Откуда:
Сообщений: 104760
waszkiewicz
Для ускорения выборки

Какой именно выборки ?
Вы спрашиваете, нужно ли в тексте запроса в WHERE указывать условия фильтрации в соответствии с порядком полей в каком то из индексов ?
19 мар 15, 11:24    [17404146]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
нет, я спрашиваю нужно учитывать на этапе проектирования таблицы последовательность полей в составном PK
19 мар 15, 11:26    [17404160]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
Glory
waszkiewicz
Для ускорения выборки

Какой именно выборки ?
Вы спрашиваете, нужно ли в тексте запроса в WHERE указывать условия фильтрации в соответствии с порядком полей в каком то из индексов ?

Да и этот вопрос небезынтересен
19 мар 15, 11:27    [17404170]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
Glory
Member

Откуда:
Сообщений: 104760
waszkiewicz
Glory
пропущено...

Какой именно выборки ?
Вы спрашиваете, нужно ли в тексте запроса в WHERE указывать условия фильтрации в соответствии с порядком полей в каком то из индексов ?

Да и этот вопрос небезынтересен

Только причем здесь именно РК ?
19 мар 15, 11:29    [17404182]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
waszkiewicz
iap
Важен!

ну например, есть сферический составной PK в вакууме
Поставщик;Товар;ДатаПоставки

Для ускорения выборки не стоит ли поля ДатаПоставки и Поставщик поменять местами?
Если индекс по первому полю не потребуется оптимизатору в запросе, то он не будет использоваться вообще.
Но если индекс используется по первому полю (с условием "="), то он будет использован и по второму.
Вот как-то так.
19 мар 15, 12:23    [17404549]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20596
iap
Если индекс по первому полю не потребуется оптимизатору в запросе, то он не будет использоваться вообще.
Ну не так категорично... а если он покрывающий?
19 мар 15, 12:33    [17404610]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Причем здесь первичный ключ и запросы? Вы его путаете с кластерным индексом?
19 мар 15, 12:48    [17404730]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31435
waszkiewicz
Важен ли?
Да, может быть важным и для выборок, и для вставки.
waszkiewicz
Для ускорения выборки не стоит ли поля ДатаПоставки и Поставщик поменять местами?
Зависит от конкретного запроса, условий запроса, значений параметров запроса и т.д.
19 мар 15, 12:52    [17404781]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31435
Владислав Колосов
Причем здесь первичный ключ и запросы? Вы его путаете с кластерным индексом?
Даже если ПК не реализуется кластерным индексом, порядок полей всё равно может быть важен.

Вопрос ТС слишком общий, на него может быть только общий ответ "иногда важен"
19 мар 15, 12:54    [17404802]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
waszkiewicz,

Конечно важен. Хотя бы с точки зрения поддержания уникальности пар в этом ключе. Не говоря уже о пользовательских запросах.
19 мар 15, 14:45    [17405558]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
o-o
Guest
NickAlex66
waszkiewicz,

Конечно важен. Хотя бы с точки зрения поддержания уникальности пар в этом ключе. Не говоря уже о пользовательских запросах.

в смысле?
если у меня все пары значений (a, b) уникальны, то это не гарантия того, что и все пары (b, a) будут уникальными?
19 мар 15, 14:51    [17405605]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20596
Уникальность совокупности полей не зависит от порядка компонентов в ней. Это же не конкатенация...
19 мар 15, 14:52    [17405614]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
o-o,

Интересно, а как SQL определяет есть ли такая же пара, которую он готовится вставить, например?
19 мар 15, 15:01    [17405669]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
o-o
Guest
NickAlex66,
я не понимаю, где подвох.
как для (a, b) проверяет, точно так же и для (b, a) проверит, какая разница-то?

create table dbo.test(a int, b int, constraint PK_test_ab primary key(a, b));
insert into dbo.test(a, b)
values (1, 2), (2, 3);

insert into dbo.test(a, b)
values (2, 3);

Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK_test_ab'. Cannot insert duplicate key in object 'dbo.test'. The duplicate key value is (2, 3).
The statement has been terminated.


create table dbo.test2(a int, b int, constraint PK_test_ba primary key(b, a));
insert into dbo.test2(a, b)
values (1, 2), (2, 3);

insert into dbo.test(a, b)
values (2, 3);

Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK_test_ba'. Cannot insert duplicate key in object 'dbo.test2'. The duplicate key value is (3, 2).
The statement has been terminated.
19 мар 15, 15:11    [17405719]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20596
При вставке записи в таблицу также выполняется вставка во все индексы таблицы. Вот тут и обнаруживается, что такая совокупность полей в таблице уже есть.
19 мар 15, 15:12    [17405722]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
o-o
Guest
во втором примере опечатка, в test2 вставка
19 мар 15, 15:12    [17405725]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
o-o,

Да нет подвоха. Чтобы SQL узнал, что такая пара уже есть он должен выполнить SELECT к имеющемуся набору. Для быстроты определения и важен порядок.
19 мар 15, 15:34    [17405839]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
o-o
Guest
NickAlex66,

вот честно, нифигошеньки не понимаю.
к чему вы клоните?
в моем примере обе таблицы кластерные.
в обеих лежит одно и то же.
вся разница в том, в каком порядке лежат эти int-ы друг за другом в каждой записи.
в первом случае картинка:
12
23
во втором
21
32

теперь я вставляю (a, b) : (2, 3)
в первом случае он бы пошел писать 23
во втором 32
в обоих случаях он сразу попадает на искомое место,
куда бы пришлось вставить.
и в обоих видит, что такое уже есть --> до свиданья.
где дольше-то и почему?
19 мар 15, 15:45    [17405902]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
o-o
Guest
если вы к тому, что в случае типа [id identity, guid] (утрирую),
выгоднее сделать (id, guid), чем (guid, id), то ок, но никто с этим и не спорит, и это уже писали:
alexeyvg
Да, может быть важным и для выборок, и для вставки.

я не понимаю, при чем тут именно уникальность пар?
19 мар 15, 15:51    [17405940]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
NickAlex66
o-o,

Да нет подвоха. Чтобы SQL узнал, что такая пара уже есть он должен выполнить SELECT к имеющемуся набору. Для быстроты определения и важен порядок.


и чем же он так важен, расскажете?
19 мар 15, 16:04    [17406052]     Ответить | Цитировать Сообщить модератору
 Re: Порядок следования полей в составном PK  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20596
NickAlex66
Чтобы SQL узнал, что такая пара уже есть он должен выполнить SELECT к имеющемуся набору.
При вставке записи в таблицу? кто Вам такую ерунду сказал?
19 мар 15, 16:36    [17406288]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить