powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос на собеседовании
122 сообщений из 122, показаны все 5 страниц
Вопрос на собеседовании
    #38467449
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем отличается PRIMARY KEY от UNIQUE CONSTRAINT?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467450
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PRIMARY KEY не допускает NULL в своих полях,
а UNIQUE - допускает.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467461
Фотография Exproment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap, ну не только :) Концептуально это различные вещи - primary key есть первичный ключ, а unique constrain просто ограничение. primary key для sql server является уникальным идентификатором записи. Если нет primary key на таблице, сервер не может не может знать, какое поле на таблице идентифицирует запись.

*конечно на логическом, а не физическом уровнях. Вспомним про применение change trcking, который требует обязательного наличия primary key.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467528
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Expromentiap, ну не только :) Концептуально это различные вещи - primary key есть первичный ключ, а unique constrain просто ограничение. primary key для sql server является уникальным идентификатором записи. Если нет primary key на таблице, сервер не может не может знать, какое поле на таблице идентифицирует запись.

*конечно на логическом, а не физическом уровнях. Вспомним про применение change trcking, который требует обязательного наличия primary key.А если у нас есть кластерный индекс, но нет primary key то сервер тоже не может уникально идентифицировать запись?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467531
Фотография Exproment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree, мне себя цитировать ?
Exproment *конечно на логическом, а не физическом уровнях.
на физическом уровне database engine всегда может однозначно идентифицировать записать. Не зависимо от наличия кластеризованного индекса и независимо от каких либо ограничений уникальности(всегда есть RID). А вот на логическом - вы совершенно правы. О чем и говорит пример с change tracking.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467533
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ExpromentSandalTree, мне себя цитировать ?
Exproment *конечно на логическом, а не физическом уровнях.
на физическом уровне database engine всегда может однозначно идентифицировать записать. Не зависимо от наличия кластеризованного индекса и независимо от каких либо ограничений уникальности( всегда есть RID ). А вот на логическом - вы совершенно правы. О чем и говорит пример с change tracking.

1. Не всегда. RID создаётся только на неуникальном кластерном индексе и только в случае повторяющихся значений.

2. У меня вопрос непро уникальный кластерный индекс, а про Primary Key, который с ним различается.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467544
Фотография Exproment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree,

1) Не придерайтесь к письму. :) Я дико сожалею что не написал "всегда есть возможность прописать RID у database engine"
2) Про кластерный индекс и физику говорить начали вы.

А свой вариант ответа на ваш вопрос я уже привел :) На мой взгляд различаются они чисто концептуально и сравнивать их нельзя.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467560
Фотография SomewhereSomehow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree1. Не всегда. RID создаётся только на неуникальном кластерном индексе и только в случае повторяющихся значений.

2. У меня вопрос непро уникальный кластерный индекс, а про Primary Key, который с ним различается.

Всегда.
Storage Engine (SE) всегда может однозначно идентифицировать запись.


А вопрос, имхо, сильно зависит... от спрашивающего.

Если такой вопрос вас спрашивает знающий человек - возможно он хочет чтобы вы порассуждали на тему, чтобы в дальнейшем углубиться по спирали - такой метод использует известный в сообществе человек Thomas LaRock или Grant Fritchy . Это годный способ. Человек начинает отвечать на этот воппрос, например, что-то про индексы которые обеспечивают констрейнты, задается вопрос по индексам и далее по индукции/дедукции - раскручивают, это дает понимание собеседующему.

Если такой вопрос спрашивает "выскочка" - который нашел в справке определение того и другого и ждет от вас что вы обнаружите энциклопедические знания документации, и по пунктам перечислите отличия - то, имхо, можно смело разворачиваться и уходить. Лично я бы, вежливо, так и сделал - т.к. это указание на способы оценки специалистов не отражающие реальную ценность специалиста, как ее вижу я. А значит работать в таком коллективе я не смогу в любом случае, даже если выучу весь синтаксис XQuery =)

Как понять, кто перед тобой, если ты заранее не знаешь? Это можно сделать по реакции на свой ответ.
Если видно:
- высокомерие граничащее с тыканьем в грязь (обусловленное только тем, что собеседующий 10 минут назад прочитал раздел справки по которому тебя спрашивает, а-ля "в какой последовательности передаются параметры в функцию datediff")
- отсутствие наводящих и уточняющих вопросов с целью понять какой ты специалист
- ощущение что больше не тебя хотят спросить, а показать свою крутость
и прочие схожие мысли.

В целом, имхо, вопрос сродни "чем отличается болт от шурупа" - вроде примерно похожи, но есть разница.
Ответ может лежать как в семантической (смысловой) области, так и в физической. Если это вопрос не для того чтобы завязать диалог, а "анкетный" вопрос - то он откровенно глупый, по крайней мере в такой формулировке. Т.к. "анкетный" вопрос все-таки, должен понимать "анкетный" ответ в той же плоскости. Например, можно было бы спросить "Для чего используется PK, а для чего UQ" - смысловой. Или "Как сервер реализует PK и как UQ" - физика.

Это вам задали на собеседовании или вы сами такие вопросы спрашиваете?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467601
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SomewhereSomehowЭто вам задали на собеседовании или вы сами такие вопросы спрашиваете?

Не спрашивали и сам не спрашиваю.

Просто думаю. Мне показалось что они очень похожи и знание различий может показать уровень специалиста.
Поэтому думаю что это неплохой вопрос для интрервью.

И я полностью согласен с вами. Иногда задают такие вопросы.... сразу понимаешь что ты слишком крут для этой позиции.
Думаю может подкрутить крутизну в обратную сторону.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467603
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ExpromentSandalTree,

1) Не придерайтесь к письму. :) Я дико сожалею что не написал "всегда есть возможность прописать RID у database engine"
2) Про кластерный индекс и физику говорить начали вы.

А свой вариант ответа на ваш вопрос я уже привел :) На мой взгляд различаются они чисто концептуально и сравнивать их нельзя.
Как понять кластерный индекс не зная "физики"?
Вы заговорили про RID, а я сказал что он вовсе не обязателен.
Код: sql
1.
2.
3.
4.
CREATE TABLE A(F1 Char(1) );
GO
INSERT INTO A(F1) VALUES ('A'), ('A')
GO


В этом примере RIDa нет и SE никак не сможет отличить одну запись от другой.

Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE B(F1 Char(1) );
GO
CREATE CLUSTERED INDEX CLIX_B ON B(F1)
GO
INSERT INTO B(F1) VALUES ('A'), ('B')
GO


В этом примере RIDa тоже нет!


Код: sql
1.
2.
3.
4.
CREATE CLUSTERED INDEX CLIX_A ON A(F1)
GO
UPDATE  B SET F1 = 'A'  WHERE F1 = 'B'
GO

А вот тут RID ы появляются в обеих таблицах.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467604
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, ещё не все отличия перечислены.

Как миниму знаю вижу ещё два.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467616
Фотография Ruuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree1. Не всегда. RID создаётся только на неуникальном кластерном индексе и только в случае повторяющихся значений.Откуда сделан такой вывод?
В документации ведь написано:
http://technet.microsoft.com/en-us/library/hh213609.aspx When a table is stored as a heap, individual rows are identified by reference to a row identifier (RID) consisting of the file number, data page number, and slot on the page.Вы наверное путаете RID и uniqueifier.
http://msdn.microsoft.com/en-us/library/ms177484.aspx If the clustered index is not a unique index, SQL Server makes any duplicate keys unique by adding an internally generated value called a uniqueifier. This four-byte value is not visible to users. It is only added when required to make the clustered key unique for use in nonclustered indexes.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467635
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeExpromentSandalTree, мне себя цитировать ?
пропущено...

на физическом уровне database engine всегда может однозначно идентифицировать записать. Не зависимо от наличия кластеризованного индекса и независимо от каких либо ограничений уникальности( всегда есть RID ). А вот на логическом - вы совершенно правы. О чем и говорит пример с change tracking.

1. Не всегда. RID создаётся только на неуникальном кластерном индексе и только в случае повторяющихся значений.

2. У меня вопрос непро уникальный кластерный индекс, а про Primary Key, который с ним различается.

Нет, RID есть всегда, он просто не всегда используется.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467711
Фотография SomewhereSomehow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Storage Engine всегда может однозначно идентифицировать запись, даже если таблица куча и все значения в ней одинаковые или неуникальный кластерный индекс и все ключи одинаковые. "Только люди видят дубликаты" (c) Paul Randal выше на скриншоте. Я думаю достаточно авторитетный источник =)

Что касается механизма поддержки уникальности. Есть понятие - закладка. Закладка - это логический указатель на строку. Физически закладка может реализовываться по-разному.

Например:
Таблица-куча - FileID:PageID:SlotID (то, что общепринято называть RID)

Таблица-кластеризованная RowStore - Clustered Index Key : [Uniqueifier] (унификатор, добавляется если кластерный индекс не уникален)

Таблица-кластеризованная ColumnStore - RowgroupID:TypleID (для кластерных колоночных индексов в 2014, идентификатор группы строк + порядковый номер строки, нигде не хранится - вычисляется)

Таблица-кластеризованная ColumnStore часть Delta Store - CSILOCATOR (для кластерных колоночных индексов в 2014, для внутренней структуры Delta Store , которая поддерживает изменения добавляется псевдо колонка CSILOCATOR суррогатный ключ, по сути просто порядковый номер)

Закладки нужны серверу для того, чтобы поддерживать изменения. Даже если никаких других индексов нет, простое написание запроса delete from t, происходит следующим образом.

Создать БД
Код: sql
1.
2.
3.
4.
5.
--Create DB
create database bmtest;
go
use bmtest;
go




Куча
Куча
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
--Heap
CREATE TABLE A(F1 Char(1) );
GO
INSERT INTO A(F1) VALUES ('A'), ('B');
GO
select *, sys.fn_PhysLocFormatter(%%physloc%%) as PhysicalLocationFormatted , %%physloc%% as PhysicalLocation from A;
go
set showplan_xml on;
go
delete from a;
go
set showplan_xml off;
go

-- Ckeck leaf level nonclustered index
create nonclustered index ix_f1 on a(f1);
go
select *, sys.fn_PhysLocFormatter(%%physloc%%) as PhysicalLocation from A with(index(ix_f1));
go
dbcc page('bmtest',1,94,3) with tableresults;




Любой запрос на изменение имеет две части, так называемые read cursor и write cursor. В части read cursor сервер определяет, какие строки нужно изменить, для этих строк он собирает закладки, эти закладки после передаются в часть write cursor. Которая выполняет изменения на основных данных и дополнительных (если есть другие индексы которые затрагивает модификация).



Обратите внимание в плане на вывод псевдо колонки Bmk1000. Это как раз и есть закладка.
В данном случае, таблица куча, а потому закладка это просто физическое расположение строки.



Можно создать не кластерный индекс и посмотреть, что лежит на его листовых страницах, в качестве закладки (вторая часть скрипта, подставьте свои номера страниц если будете пробовать сами).



Видно, что используется HEAP RID key, который совпадает с физическим положением строки в кластерном индексе (предыдущий рисунок).

Неуникальный кластерный индекс
Тот же набор экспериментов для неуникального кластерного индекса.
Неуникальный кластерный индекс
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 --Clustered Index
CREATE CLUSTERED INDEX CLIX_B ON A(F1);
go
set showplan_xml on;
go
delete from a;
go
set showplan_xml off;
go

-- Ckeck leaf level nonclustered index
select *, sys.fn_PhysLocFormatter(%%physloc%%) as PhysicalLocation from A with(index(ix_f1));
go
dbcc page('bmtest',1,121,3) with tableresults;





Обратите внимание, теперь, в качестве закладки в write cursor передается ключ кластерного индекса + унификатор (т.к. мы сделали неуникальный кластреный индекс). Второй интересный момент, поскольку на предыдущем шаге мы создали некластреный индекс, то для поиска строк оптимизатор решил использовать его, и значение закладки взял именно из некластерного индекса.

Можно посмотреть, что хранится на листовом уровне некластерного индекса теперь:



Видно, что теперь нет RID-а, но добавился унификатор, причем, что интересно, поскольку значения A,B у нас фактически разные, унификатор один и тот же.

Уникальный кластерный индекс
Уникальный кластерный индекс
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
--Unique Clustered Index
CREATE UNIQUE CLUSTERED INDEX CLIX_B ON A(F1) WITH (DROP_EXISTING = ON);
go
set showplan_xml on;
go
delete from a;
go
set showplan_xml off;
go

-- Ckeck leaf level nonclustered index
select *, sys.fn_PhysLocFormatter(%%physloc%%) as PhysicalLocation from A with(index(ix_f1));
go
dbcc page('bmtest',1,144,3) with tableresults;



Теперь, поскольку индекс уникальный, в качестве закладки, используется просто ключ кластерного индекса:





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

Удалим БД
Код: sql
1.
2.
3.
4.
5.
-- Drop DB
use master;
go
drop database bmtest;
go


...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467752
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PK - всегда один единственный
UQ - может быть сколько угодно
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467753
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryPK - всегда один единственныйНе всегда. Его вообще может не быть. Увы.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467754
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapGloryPK - всегда один единственныйНе всегда. Его вообще может не быть. Увы.
В смысле ? Вы можете создать больше одного ПК ?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467755
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gloryiapпропущено...
Не всегда. Его вообще может не быть. Увы.
В смысле ? Вы можете создать больше одного ПК ?Могу вообще не создавать.
И не будет "одного-единственного"...
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467758
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapGloryпропущено...

В смысле ? Вы можете создать больше одного ПК ?Могу вообще не создавать.
И не будет "одного-единственного"...
Словосочетание "один единственный" означает, что создать его можно в единственном экземпляре.
В отличии от уникальных.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467763
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, я предполагал, что точнее сказать
"можно создать не более одного PK и сколько угодно UQ".
Ничего, кроме этого.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467884
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuuuSandalTree1. Не всегда. RID создаётся только на неуникальном кластерном индексе и только в случае повторяющихся значений.Откуда сделан такой вывод?
В документации ведь написано:
http://technet.microsoft.com/en-us/library/hh213609.aspx When a table is stored as a heap, individual rows are identified by reference to a row identifier (RID) consisting of the file number, data page number, and slot on the page.Вы наверное путаете RID и uniqueifier.
http://msdn.microsoft.com/en-us/library/ms177484.aspx If the clustered index is not a unique index, SQL Server makes any duplicate keys unique by adding an internally generated value called a uniqueifier. This four-byte value is not visible to users. It is only added when required to make the clustered key unique for use in nonclustered indexes.Вы правы. Я их попутал.

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

Спасибо за поправку.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467900
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SomewhereSomehowМожно создать не кластерный индекс и посмотреть, что лежит на его листовых страницах, в качестве закладки (вторая часть скрипта, подставьте свои номера страниц если будете пробовать сами).



Видно, что используется HEAP RID key, который совпадает с физическим положением строки в кластерном индексе (предыдущий рисунок).

HEAP RID key используется индексом, но в реальности-то он не хранится.
Нету его на странице данных.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467902
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapGloryPK - всегда один единственныйНе всегда. Его вообще может не быть. Увы.Полагаю Гаря хотел сказать так:
авторUQ - может быть сколько угодно
PK - может быть только один
Вот уже три отличия нашли.
Добавлю от себя четвёртое:
авторПри создании PK по дефолту создаётся кластерный индекс, а при создании UQ нет.Всего 4 отличия. Кто-то знает/видит ещё?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467903
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapВ общем, я предполагал, что точнее сказать
"можно создать не более одного PK и сколько угодно UQ".
Ничего, кроме этого.Все правильно поняли
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467912
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeДобавлю от себя четвёртое:
авторПри создании PK по дефолту создаётся кластерный индекс, а при создании UQ нет.
Только если ранее не был объявлен/создан другой кластерный индекс:
Код: sql
1.
2.
3.
4.
5.
6.
7.
use tempdb
go
create table dbo.T (
  n int unique clustered,
  k int primary key
)
select type_desc from sys.indexes where object_id=OBJECT_ID(N'dbo.T') and is_primary_key=1


Код: plaintext
1.
2.
3.
type_desc
-------------------
NONCLUSTERED
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467913
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныSandalTreeДобавлю от себя четвёртое:
пропущено...

Только если ранее не был объявлен/создан другой кластерный индекс:
Спасибо за поправку.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467919
Фотография SomewhereSomehow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeHEAP RID key используется индексом, но в реальности-то он не хранится.
Нету его на странице данных.
Вывод DBCC Page вас не убеждает? Вы полагаете DBCC Page что-то придумывает, а не использует данные страницы?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467926
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SomewhereSomehowSandalTreeHEAP RID key используется индексом, но в реальности-то он не хранится.
Нету его на странице данных.
Вывод DBCC Page вас не убеждает? Вы полагаете DBCC Page что-то придумывает, а не использует данные страницы?

Не понял вопроса.

Хотел лишь сказать что в хипе индекс ссылается на записи по RID, но RID в самих данных не хранится.

Если я не прав, покажите мне где.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38467951
Фотография SomewhereSomehow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeHEAP RID key используется индексом, но в реальности-то он не хранится.
Нету его на странице данных.

SandalTreeНе понял вопроса.

Хотел лишь сказать что в хипе индекс ссылается на записи по RID, но RID в самих данных не хранится.

Если я не прав, покажите мне где.
На страницах данных некластерного индекса он есть и хранится. В самой куче, да, не хранится, ибо незачем.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38468053
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SomewhereSomehowSandalTreeHEAP RID key используется индексом, но в реальности-то он не хранится.
Нету его на странице данных.

SandalTreeНе понял вопроса.

Хотел лишь сказать что в хипе индекс ссылается на записи по RID, но RID в самих данных не хранится.

Если я не прав, покажите мне где.
На страницах данных некластерного индекса он есть и хранится. В самой куче, да, не хранится, ибо незачем.Значит консенсус.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38468431
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторсколько угодно UQ
Не сколько угодно, а не больше 1000 (или 250, зависит от версии) :-)
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38468668
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость333авторсколько угодно UQ
Не сколько угодно, а не больше 1000 (или 250, зависит от версии) :-)А столько обычно и не угодно!
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38468935
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость333авторсколько угодно UQ
Не сколько угодно, а не больше 1000 (или 250, зависит от версии) :-)Ну уж если быть совсем точным, то не больше 999




И кстати, второй вопрос:

Чем отличается UNIQUE CONSTRAINT от UNIQUE NONCLUSTERED INDEX ?

(я пока нашёл только 2 отличия, может кто знает больше?)
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38468949
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeЧем отличается UNIQUE CONSTRAINT от UNIQUE NONCLUSTERED INDEX ?
UNIQUE CONSTRAINT - это декларация уникальности
UNIQUE NONCLUSTERED INDEX - это физическая реализация UNIQUE CONSTRAINT

ЗЫ
Кстати в предыдущих отличиях тоже сильно намешаны декларативные и физические свойства.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38468978
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeНу уж если быть совсем точным, то не больше 999
Не-а.
Один кластерный + 999 некластерных.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38468980
Фотография Exproment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость333Один кластерный + 999 некластерных.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38468985
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeЧем отличается UNIQUE CONSTRAINT от UNIQUE NONCLUSTERED INDEX ?
UNIQUE CONSTRAINT - это декларация уникальности
UNIQUE NONCLUSTERED INDEX - это физическая реализация UNIQUE CONSTRAINT

ЗЫ
Кстати в предыдущих отличиях тоже сильно намешаны декларативные и физические свойства.

Вроде ты прав.
Это должно означать что UNIQUE CONSTRAINT не имеет каких-либо особенных свойств которых нет у UNIQUE NONCLUSTERED INDEX.

Так?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469004
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уникальный индекс может быть фильтрованным.
Для ограничения уникальности фильтр установить нельзя.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469034
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeЭто должно означать что UNIQUE CONSTRAINT не имеет каких-либо особенных свойств которых нет у UNIQUE NONCLUSTERED INDEX.

Так?
Трудно сравнивать разные вещи
Можно ли говорить, например, насколько 2 в степени 3 отличается от 2*2*2 или от 2+2+2+2 ?
С одной сильно отличается, с другой стороны - результат одинаков.
А если углубится в технические детали реализации этих операций в каких то процессорах, то можно просто погрязнуть в деталях.
Лучше сначала определится, до какого уровня происходит сравнение.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469063
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость333SandalTreeНу уж если быть совсем точным, то не больше 999
Не-а.
Один кластерный + 999 некластерных.Мы говорили про UNIQUE CONSTRAINT, а их может быть не больше чем 999 на таблицу.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469067
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeЭто должно означать что UNIQUE CONSTRAINT не имеет каких-либо особенных свойств которых нет у UNIQUE NONCLUSTERED INDEX.

Так?
Трудно сравнивать разные вещи
Можно ли говорить, например, насколько 2 в степени 3 отличается от 2*2*2 или от 2+2+2+2 ?
С одной сильно отличается, с другой стороны - результат одинаков.
А если углубится в технические детали реализации этих операций в каких то процессорах, то можно просто погрязнуть в деталях.
Лучше сначала определится, до какого уровня происходит сравнение.

Деталей-то вроде не сильно много что-б погрязнуть. Или я вижу только верхушку айсберга?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469070
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость333Уникальный индекс может быть фильтрованным.
Для ограничения уникальности фильтр установить нельзя.

Правильно. Другими словами возможна ситуация когда уникальный индекс по некоторому полю не предотвращает наличие неуникальных записей.

Ещё что?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469087
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeГость333пропущено...

Не-а.
Один кластерный + 999 некластерных.Мы говорили про UNIQUE CONSTRAINT, а их может быть не больше чем 999 на таблицу.
Некластерных UQ — не больше чем 999.
Плюс один кластерный.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table t
( id int,
  constraint t_uq_1 unique clustered(id),
  constraint t_uq_2 unique nonclustered(id),
  constraint t_uq_3 unique nonclustered(id),
  constraint t_uq_4 unique nonclustered(id),
  ...
  constraint t_uq_1000 unique nonclustered(id)
)


Код для создания такой таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
declare @sql nvarchar(max);

set @sql = N'create table t
( id int,
  constraint t_uq_1 unique clustered(id)';

declare @i int;

set @i = 2;

while @i <= 1000
begin
  set @sql = @sql + N',
  constraint t_uq_' + cast(@i as nvarchar(30)) + N' unique nonclustered(id)';

  set @i = @i + 1;
end;

set @sql = @sql + N'
)';

exec sp_executesql @sql;

exec sp_help 't';

...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469142
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость333SandalTreeпропущено...
Мы говорили про UNIQUE CONSTRAINT, а их может быть не больше чем 999 на таблицу.
Некластерных UQ — не больше чем 999.
Плюс один кластерный.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table t
( id int,
  constraint t_uq_1 unique clustered(id),
  constraint t_uq_2 unique nonclustered(id),
  constraint t_uq_3 unique nonclustered(id),
  constraint t_uq_4 unique nonclustered(id),
  ...
  constraint t_uq_1000 unique nonclustered(id)
)




Понял идею. Хитро.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469266
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeЭто должно означать что UNIQUE CONSTRAINT не имеет каких-либо особенных свойств которых нет у UNIQUE NONCLUSTERED INDEX.

Так?
Трудно сравнивать разные вещи
Можно ли говорить, например, насколько 2 в степени 3 отличается от 2*2*2 или от 2+2+2+2 ?
С одной сильно отличается, с другой стороны - результат одинаков.
А если углубится в технические детали реализации этих операций в каких то процессорах, то можно просто погрязнуть в деталях.
Лучше сначала определится, до какого уровня происходит сравнение.
Глоря, вот обьясни мне ещё такую вещь.
Код: sql
1.
2.
3.
4.
5.
6.
7.
USE msdb
GO
SELECT i.* , c.name as column_name
FROM sys.indexes as i 
INNER JOIN sys.index_columns as ic on i.index_id = ic.index_id and i.object_id = ic.object_id
INNER JOIN sys.columns as c on ic.column_id = c.column_id and i.object_id = c.object_id
WHERE i.object_id = object_id('log_shipping_primary_databases') and i.index_id != 1 and i.is_unique = 1


В 2012м в Стандарте и Экспрессе + 2008R2 Энтерпрайз выдаёт что у "log_shipping_primary_databases" один UNIQUE CONSTRAINT (ака индекс) и ещё один UNIQUE NONCLUSTERED INDEX по тому-же полю.

Там какой-то потаённый смысл в 2-х одинаковых индексах или это просто баг?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469317
Фотография Ruuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeЭто должно означать что UNIQUE CONSTRAINT не имеет каких-либо особенных свойств которых нет у UNIQUE NONCLUSTERED INDEX.Смотря что под этим иметь ввиду.
Если использовать уникальный индекс для ограничения уникальности, то однажды можно столкнуться с ситуацией, что этот индекс кому-то помешал, и этот кто-то не долго мудрствуя удалил индекс.
А с уникальным констрейнтом этот кто-то получит ошибку:
Код: sql
1.
An explicit DROP INDEX is not allowed on index 'some_index'. It is being used for UNIQUE KEY constraint enforcement.


Что заставит его еще раз подумать о необходимости удаления.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469320
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuuuSandalTreeЭто должно означать что UNIQUE CONSTRAINT не имеет каких-либо особенных свойств которых нет у UNIQUE NONCLUSTERED INDEX.Смотря что под этим иметь ввиду.
Если использовать уникальный индекс для ограничения уникальности, то однажды можно столкнуться с ситуацией, что этот индекс кому-то помешал, и этот кто-то не долго мудрствуя удалил индекс.
А с уникальным констрейнтом этот кто-то получит ошибку:
Код: sql
1.
An explicit DROP INDEX is not allowed on index 'some_index'. It is being used for UNIQUE KEY constraint enforcement.


Что заставит его еще раз подумать о необходимости удаления.
Притянул за уши.

Если выскакивает ошибка:
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'UC_B1000' . Cannot insert duplicate key in object 'dbo.B'. The duplicate key value is (A).
The statement has been terminated.

То она как-бы сразу говорит чего нужно удалять.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469324
Фотография Ruuu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeRuuuпропущено...
Смотря что под этим иметь ввиду.
Если использовать уникальный индекс для ограничения уникальности, то однажды можно столкнуться с ситуацией, что этот индекс кому-то помешал, и этот кто-то не долго мудрствуя удалил индекс.
А с уникальным констрейнтом этот кто-то получит ошибку:
Код: sql
1.
An explicit DROP INDEX is not allowed on index 'some_index'. It is being used for UNIQUE KEY constraint enforcement.



Что заставит его еще раз подумать о необходимости удаления.
Притянул за уши.

Если выскакивает ошибка:
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'UC_B1000' . Cannot insert duplicate key in object 'dbo.B'. The duplicate key value is (A).
The statement has been terminated.

То она как-бы сразу говорит чего нужно удалять. Я имел ввиду, конечно, не это, а ситуацию, когда план неоптимальный из-за этого индекса строится или медленно идет обновление/вставка, и/или в запросах он не используется.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469333
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuuuЯ имел ввиду, конечно, не это, а ситуацию, когда план неоптимальный из-за этого индекса строится или медленно идет обновление/вставка, и/или в запросах он не используется.Я так ду что этот индекс должен использоваться, ибо во время каждой ставки должен шерститься.

И если в базу влез тюнер, который без разбору и проверки индексы мочит, то тут никакой UC уже не поможет.

Да, кстати, этот даже и неплохо. Тебе потом через неделю звонок, а у нас тут данные хреновые.
Ты 4 часа потратил - разбирался (это гуд, ибо тебе за это платят) потом выложил на стол доказательства и ещё 4 часа на починку.
Вот так один му**к тебя на целый день работой обеспечил. А знаешь сколько таких мудаков в мире...
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469482
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeТам какой-то потаённый смысл в 2-х одинаковых индексах или это просто баг?
Я вам про это уже говорил
Primary KEY, Unique Constraint - это только _декларация_
Грубо говоря, только запись в списке объектов, которая ссылается на другой _физический_ объект.
Физическим же объектом для этих ограничений всегда является индекс.

Ваши два вопроса с собеседования на мой взгляд были заданы для того, чтобы выяснить, понимате ли вы разницу между физическим и логическим уровнями.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469754
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeТам какой-то потаённый смысл в 2-х одинаковых индексах или это просто баг?
Я вам про это уже говорил
Primary KEY, Unique Constraint - это только _декларация_
Грубо говоря, только запись в списке объектов, которая ссылается на другой _физический_ объект.
Физическим же объектом для этих ограничений всегда является индекс.

Ваши два вопроса с собеседования на мой взгляд были заданы для того, чтобы выяснить, понимате ли вы разницу между физическим и логическим уровнями.В таблице но одном и том же поле построено абсолютно два одинаковых индекса, один из которых создан как Unique Constraint, а другой как Unique Index.

В чём смысл наличия обоих индексов - вот мой вопрос.
Даже SSMS не рассматривает Unique Constraint как собственно Constraint.

И кстати, не надо меня макать. Эти "Вопросы на собеседовании" я сам придумал. Если вы знаете и хотите помочь, помогите.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469775
Александр52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree, зачем вы задаете на собеседовании вопросы, на которые сами не можете ответить?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469786
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeВ таблице но одном и том же поле построено абсолютно два одинаковых индекса, один из которых создан как Unique Constraint, а другой как Unique Index.
И в третий раз - Primary/Unique Constraint автоматически выполнятет create index. Всегда.
Сам по себе Constraint выполняет только декларативную роль.
Т.е. нет никаких двух индексов. Если только вы не создали явно еще индексы. Которые вы можете создавать всегда и которые не будут иметь к Constraint никакого отношения.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469791
GlorySandalTreeТам какой-то потаённый смысл в 2-х одинаковых индексах или это просто баг?
Я вам про это уже говорил
Primary KEY, Unique Constraint - это только _декларация_
Грубо говоря, только запись в списке объектов, которая ссылается на другой _физический_ объект.
Физическим же объектом для этих ограничений всегда является индекс.

Ваши два вопроса с собеседования на мой взгляд были заданы для того, чтобы выяснить, понимате ли вы разницу между физическим и логическим уровнями.Вячеслав, по-моему вы не совсем правы. Unique Constraint срабатывает раньше уникального индекса. На этом основании, как мне кажется, физическая реализация тоже несколько отличается. Доказывать прямо сейчас не готов, сам не проверял. Если будет час-другой - попробую посмотреть.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469800
капец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SandalTree,

вы не сандальное, а скандальное дерево.
3 раза уже Глори ответил: консрейнт это ДЕКЛАРАЦИЯ, индекс -- его реализация.
вот код выполните и насладитесь:
Код: sql
1.
2.
create table t(id int);
alter table t add constraint t_id_uq unique(id);


создаете КОНСТРЕЙНТ, а "за сценой" создается индекс для его поддержания.
и имена у них поэтому одинаковые
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469802
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
любитель вопросов на собеседованВячеслав, по-моему вы не совсем правы. Unique Constraint срабатывает раньше уникального индекса. На этом основании, как мне кажется, физическая реализация тоже несколько отличается.
Фейспалм какой то.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469811
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр52SandalTree, зачем вы задаете на собеседовании вопросы, на которые сами не можете ответить?Беседую с вами. Тут тоже не все могут на эти вопросы ответить.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469814
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeТут тоже не все могут на эти вопросы ответить.
Ага, найдите различия между красным и соленым...
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469830
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeВ таблице но одном и том же поле построено абсолютно два одинаковых индекса, один из которых создан как Unique Constraint, а другой как Unique Index.
Unique Constraint был создан без указания имени, наверняка в DDL таблицы после имени столбца просто приписали UNIQUE.
Для создания индекса написали отдельную DDL-инструкцию, не посмотрев, что уже есть Unique Constraint.
Мелкий баг, не более.
Код: sql
1.
2.
3.
create table MyTable (id int unique);

create unique index ui_MyTable_id on MyTable(id)
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469844
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeВ таблице но одном и том же поле построено абсолютно два одинаковых индекса, один из которых создан как Unique Constraint, а другой как Unique Index.
И в третий раз - Primary/Unique Constraint автоматически выполнятет create index. Всегда.
Сам по себе Constraint выполняет только декларативную роль.
Т.е. нет никаких двух индексов. Если только вы не создали явно еще индексы. Которые вы можете создавать всегда и которые не будут иметь к Constraint никакого отношения.

Я вам и скрипт привёл и картинку показал что в "msdb.dbo.log_shipping_primary_databases" два одинаковых индекса, а вы мне пытаетесь доказать что их нет.

Давайте быть конструктивными.
1. Создание Unique Constraint автоматически выполнятет create index
2. Дополнительный уникальный нефильтрованый индекс по тому-же полю будет попросту игнорироваться и лишь замедлять работу на инсертах.

Поправьте меня если я не прав.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469846
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость333SandalTreeВ таблице но одном и том же поле построено абсолютно два одинаковых индекса, один из которых создан как Unique Constraint, а другой как Unique Index.
Unique Constraint был создан без указания имени, наверняка в DDL таблицы после имени столбца просто приписали UNIQUE.
Для создания индекса написали отдельную DDL-инструкцию, не посмотрев, что уже есть Unique Constraint.
Мелкий баг, не более.
Код: sql
1.
2.
3.
create table MyTable (id int unique);

create unique index ui_MyTable_id on MyTable(id)

Спасибо. Я не был уверен, поэтому и поинтересовался.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469849
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeЯ вам и скрипт привёл и картинку показал что в "msdb.dbo.log_shipping_primary_databases" два одинаковых индекса, а вы мне пытаетесь доказать что их нет.
Вы привели картинку, где один кострайнт создал два индекса ?
Покажите мне код, где один кострайнт создал два индекса
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469858
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ограничения unique constraint описаны в стандарте ANSI SQL. Понятия "индекс" в ANSI SQL нет вообще. Никаких указаний относительно реализации unique constraint тоже нет. Теоретически, при insert/update можно сканировать всю таблицу в поисках дублированных значений — и требования стандарта в части UQ будут выполнены.

Конечно, в любой СУБД unique constraint реализуется при помощи индекса. То, что в MSSQL имя индекса, реализующего UQ, всегда совпадает с именем UQ — это особенности MSSQL. В некоторых других СУБД имена индекса и констрейнта при желании могут отличаться.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469874
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
я вообще не понимаю, к кому претензии-то?
вопрос надо задать тому, кто создал повторяющийся индекс.
видно же из имен, что первый создан автоматически при декларации уникальности,
как написал Гость333, а второй кто-то добавил, осознанно дав ему имя.
что сервер позволяет дублировать индексы не есть гуд, дело давно известное и вот тут описанное:
SQL Server lets you create completely redundant and totally duplicate indexes
там же можно скачать код для поиска задублированных индексов.

а у меня вот есть подозрение, кто автор повторного индекса с картинки.
это тот, кто спросил "где констрейнт?", не найдя его в папочке контрейнтов.
наверное потому что не читал, что папка для CHECK CONSTRAINTS.
а юники надо в ключах искать, они же по сути ключи и есть.
просто всего один из них можно выбрать как PRIMARY
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469877
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeЯ вам и скрипт привёл и картинку показал что в "msdb.dbo.log_shipping_primary_databases" два одинаковых индекса, а вы мне пытаетесь доказать что их нет.
Вы привели картинку, где один кострайнт создал два индекса ?
Покажите мне код, где один кострайнт создал два индексаГлоря, вы это сами придумали и сами с собой спорите.

Гость333 уже подтвердил что я нашёл баг. И ничего особенного в этом нет.

Если вы считаете что это не баг, то тогда расскажите как система будет использовать индекс "uc1lsprimary_databases".
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469883
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oа у меня вот есть подозрение, кто автор повторного индекса с картинки.
это тот, кто спросил "где констрейнт?", не найдя его в папочке контрейнтов.
наверное потому что не читал, что папка для CHECK CONSTRAINTS.
а юники надо в ключах искать, они же по сути ключи и есть.
просто всего один из них можно выбрать как PRIMARYНу это как-бы неожиданно от создателей MSDB.
При том что это никто с версии 2008 его не заметил и не пофиксил.

Поэтому у меня и возник резонный вопрос: "А вдруг это зачем-то нужно?"
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469889
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oчто сервер позволяет дублировать индексы не есть гуд, дело давно известное и вот тут описанное:
SQL Server lets you create completely redundant and totally duplicate indexes
Вот, кстати, да.
Проверил сейчас на sqlfiddle поведение разных серверов. Oracle единственный возмутился на дубликат индекса: ORA-01408: such column list already indexed . Остальные (MSSQL, MySQL, PostgreSQL) такое пропустили без проблем.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469890
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
SandalTreeГость333
Код: sql
1.
2.
3.
create table MyTable (id int unique);

create unique index ui_MyTable_id on MyTable(id)

Спасибо. Я не был уверен, поэтому и поинтересовался.

о, мне кажется, я правильно улавливаю суть происходящего.
не было никакого собеседования (что, в общем-то, потом было автором заявлено)
увидал "задвоение индекса", но почему-то не провел простейший эксперимент
(то, что сделал Гость333), а придумал "вопрос для собеседования".
чтоб "оправдать" себе наличие задвоенного индекса, либо убедиться, что все же второй индекс можно удалить
этакий "непрямой" подход спросить себе интересное, не компрометируя себя
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469893
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeГлоря, вы это сами придумали и сами с собой спорите.

Гость333 уже подтвердил что я нашёл баг. И ничего особенного в этом нет.
Баг - это когда что-то работает не так, как задумано/описано/декларировано.
Что в вашем примере работает неправильно ?
Где-то написано, что нельзя создавать совпадающие индексы ?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469908
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeГлоря, вы это сами придумали и сами с собой спорите.

Гость333 уже подтвердил что я нашёл баг. И ничего особенного в этом нет.
Баг - это когда что-то работает не так, как задумано/описано/декларировано.
Что в вашем примере работает неправильно ?
Где-то написано, что нельзя создавать совпадающие индексы ?
Думаю, это можно назвать performance bug. Из-за дублирующего уникального индекса имеем ничем не оправданное замедление DML-операций. Другое дело, что таблица крошечная, и для измерения этого замедления мощный микроскоп нужен.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469918
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость333Думаю, это можно назвать performance bug. Из-за дублирующего уникального индекса имеем ничем не оправданное замедление DML-операций.
Проанализируйте sys.dm_db_index_usage_stats своей базы. Наверное там тоже найдутся кандидаты на "performance bug". Даже недблированные.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469927
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oSandalTreeпропущено...
Спасибо. Я не был уверен, поэтому и поинтересовался.

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

В AdventureWorks такое меня не смутило, а вот в MSDB совсем другое дело.

У меня-то и записей в той таблице нет
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469931
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryГость333Думаю, это можно назвать performance bug. Из-за дублирующего уникального индекса имеем ничем не оправданное замедление DML-операций.
Проанализируйте sys.dm_db_index_usage_stats своей базы. Наверное там тоже найдутся кандидаты на "performance bug". Даже недблированные.Глоря, но мы тебя всё равно уважаем.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469941
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryГость333Думаю, это можно назвать performance bug. Из-за дублирующего уникального индекса имеем ничем не оправданное замедление DML-операций.
Проанализируйте sys.dm_db_index_usage_stats своей базы. Наверное там тоже найдутся кандидаты на "performance bug". Даже недблированные.
Несомненно. Но если недублированные — это только кандидаты, то дублированные — это уже точно "performance bug", или "performance issue", не знаю как правильно :-)
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469955
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость333Несомненно. Но если недублированные — это только кандидаты, то дублированные — это уже точно "performance bug", или "performance issue", не знаю как правильно :-)
Только какое отношение все это имеет к констрайнтам и индексам ?
И если я создам недублированный индекс, который не используется ни в одном запросе, то это никак не отразится на performance ?
А вот если создан дублированный, то сразу отразится ?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469958
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
SandalTreeГлоря, вы это сами придумали и сами с собой спорите.

Гость333 уже подтвердил что я нашёл баг. И ничего особенного в этом нет.


давайте уже честными будем, а?
Вы не разобрались и пришли спросить себе о том, чего не знали.
Вам повторили (именно Glory) несколько раз то, чего Вы не понимали.
Glory конкретно Вас ни разу не обозвал, и в данной ситуации именно он прав,
как подтвердил Гость333, кроме Оракла остальные СУБД ведут себя так же в отношении повторяющихся индексов,
нигде не заявлено, что их не может быть -> это не баг.
то, что Гость333 пытается внести "мир" в ситуевину (performance bug) для прекращения дебатов, похвально.
но Вы-то чего уже не скажете "всем спасибо" и не успокоитесь?
и вот конкретно зачем обозвали Гарей, Глорей?
и вот это "тыканье" постоянное тоже поднадоело, если честно.
у меня о Вас сложилось впечатление "массовик-затейник" из пионерского отряда,
половина тем пронизана какой-то "крутизной" посетителей семинаров и раздачей медалей "узнавателям персонажей".
Вы вот их может и видели/слышали лично, но блин, Вы их не читали даже в минимальном объеме,
есть чем гордиться, да...
меньше было бы "выворачивания пальцев", меньше бы было растрат времени на привлечение народа
вопросами "несуществующего" собеседования.
задавши конкретный незамаскированный вопрос, можно куда быстрее получить ответ по теме,
без написания 3-х страних, из к-ых одна это выяснение: "так оно было или нет, это собеседование, и кто кого обсобеседил?"
IMHO
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38469962
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryГость333Несомненно. Но если недублированные — это только кандидаты, то дублированные — это уже точно "performance bug", или "performance issue", не знаю как правильно :-)
Только какое отношение все это имеет к констрайнтам и индексам ?
И если я создам недублированный индекс, который не используется ни в одном запросе, то это никак не отразится на performance ?
А вот если создан дублированный, то сразу отразится ?

SandalTreeЯ просто писал процедурку по документированию вот мне и стало интересно различие, а когда взялся шерстить другие базы то наткнулся на этот дубликат.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470007
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oSandalTreeГлоря, вы это сами придумали и сами с собой спорите.

Гость333 уже подтвердил что я нашёл баг. И ничего особенного в этом нет.


давайте уже честными будем, а?
Вы не разобрались и пришли спросить себе о том, чего не знали.
Вам повторили (именно Glory) несколько раз то, чего Вы не понимали.
Glory конкретно Вас ни разу не обозвал, и в данной ситуации именно он прав,
как подтвердил Гость333, кроме Оракла остальные СУБД ведут себя так же в отношении повторяющихся индексов,
нигде не заявлено, что их не может быть -> это не баг.
то, что Гость333 пытается внести "мир" в ситуевину (performance bug) для прекращения дебатов, похвально.
но Вы-то чего уже не скажете "всем спасибо" и не успокоитесь?
и вот конкретно зачем обозвали Гарей, Глорей?
и вот это "тыканье" постоянное тоже поднадоело, если честно.
у меня о Вас сложилось впечатление "массовик-затейник" из пионерского отряда,
половина тем пронизана какой-то "крутизной" посетителей семинаров и раздачей медалей "узнавателям персонажей".
Вы вот их может и видели/слышали лично, но блин, Вы их не читали даже в минимальном объеме,
есть чем гордиться, да...
меньше было бы "выворачивания пальцев", меньше бы было растрат времени на привлечение народа
вопросами "несуществующего" собеседования.
задавши конкретный незамаскированный вопрос, можно куда быстрее получить ответ по теме,
без написания 3-х страних, из к-ых одна это выяснение: "так оно было или нет, это собеседование, и кто кого обсобеседил?"
IMHO


Если я случайно назвал Глорю Гарей, то сорри. не хотел.


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

"Собеседование" могло иметь место. Такой вопрос может всплыть у любого и возможно теперь кто-то его задаст. Разве не так?

Я всё это прошерстил ДО того как задать вопрос, но мне нужно было просто убедиться что я на верном пути.
Спасибо что подтвердили.

Если кто-то вдруг ненароком подумал что я не знаю чем отличаются PRIMARY KEY от UNIQUE CONSTRAINT, то он заблуждался.


И кстати, тут ещё не до конца раскрыли "разницу" чем отличается UNIQUE CONSTRAINT от UNIQUE NONCLUSTERED INDEX, кроме как авторUNIQUE CONSTRAINT - это декларация уникальности
UNIQUE NONCLUSTERED INDEX - это физическая реализация UNIQUE CONSTRAINT
Что-б не томить общественность понапрасну сам скажу:
Индекс может иметь INCLUDED Columns, а UC нет.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470039
Зайцев Фёдор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый же ответ был полным и правильным.
Не нужно устраивать из собеседования викторину "Угадай, какую тонкость реализации правильно/неправильно я вспомнил"
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470051
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
SandalTree
И кстати, тут ещё не до конца раскрыли "разницу" чем отличается UNIQUE CONSTRAINT от UNIQUE NONCLUSTERED INDEX, кроме как авторUNIQUE CONSTRAINT - это декларация уникальности
UNIQUE NONCLUSTERED INDEX - это физическая реализация UNIQUE CONSTRAINTЧто-б не томить общественность понапрасну сам скажу:
Индекс может иметь INCLUDED Columns, а UC нет.




не, ну я из темы удаляюсь.
Вы сравниваете абстрактное(декларативное в нашем случае) понятие с конкретными(физическими) сущностями.

да, unique-констрейнты реализуются через индексы.
НО индексы изобрели не только для этого.
о чем вообще спор?

типа:
-- какие вы знаете способы наземной транспортировки людей?
-- поезда

-- а давайте перечислим отличия поездов от способов наземной транспортировки людей!!!
Glory: "способы" -- это нечто абстрактное, реализовано поездами, обсуждать отличия некорректно.
SandalTree: а вот я продолжу, про отличия. поезда, они еще и почтово-багажные бывают!
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470066
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeЕсли я случайно назвал Глорю Гарей, то сорри. не хотел.

если вы не в курсе, "недокументированный" перевод, или вольная транслитерация ника вполне является оскорблением в интернете.
вполне возможно, что для вас сочетания «ДеревоСандальского, МасляноеДерево, СанделТришкин» не будут являться обидными, но подобное коверканье выглядит, по крайней мере, некрасивым.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470308
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeВ таблице но одном и том же поле построено абсолютно два одинаковых индекса, один из которых создан как Unique Constraint, а другой как Unique Index.

В чём смысл наличия обоих индексов - вот мой вопрос. Очень просто. Это Enterprise, а не RDBS в вакууме.

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

Поэтому путём уменьшения контроля и не расширения функционала разрабы добиваются повышенной гибкости системы.
Андестуд?!

SandalTree, считайте это багом - ваше правр, но вашу кошерную RDBS с трушными панятиями я бы ни за что не купил.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470436
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarikNavySandalTreeЕсли я случайно назвал Глорю Гарей, то сорри. не хотел.

если вы не в курсе, "недокументированный" перевод, или вольная транслитерация ника вполне является оскорблением в интернете.
вполне возможно, что для вас сочетания «ДеревоСандальского, МасляноеДерево, СанделТришкин» не будут являться обидными, но подобное коверканье выглядит, по крайней мере, некрасивым. Может быть вы немного не в теме, на скуле есть два очень уважаемых мною ника Garya и Glory. Если я их нечаянно попутал вы теперь над моим ником упражняться будете?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470452
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oне, ну я из темы удаляюсь.
Вы сравниваете абстрактное(декларативное в нашем случае) понятие с конкретными(физическими) сущностями.

Да всё я понимаю, это как "борьба слона с китом".

Какая-б не была сущность декларативная или физическая, но когда у тебя есть конкретная задача у тебя стоит вопрос "что применить?". И только зная точные различия между ними можно принять правильное решение.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470453
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MniorSandalTreeВ таблице но одном и том же поле построено абсолютно два одинаковых индекса, один из которых создан как Unique Constraint, а другой как Unique Index.

В чём смысл наличия обоих индексов - вот мой вопрос. Очень просто. Это Enterprise, а не RDBS в вакууме.

Это хорошее обьяснение. Самое замечательное в нём что можно оправдать ЛЮБОЙ ляп.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470620
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
у меня та же картина, вот скриптец этой таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
CREATE TABLE [dbo].[log_shipping_primary_databases](
	[primary_id] [uniqueidentifier] NOT NULL,
	[primary_database] [sysname] NOT NULL,
	[backup_directory] [nvarchar](500) NOT NULL,
	[backup_share] [nvarchar](500) NOT NULL,
	[backup_retention_period] [int] NOT NULL,
	[backup_job_id] [uniqueidentifier] NOT NULL,
	[monitor_server] [sysname] NOT NULL,
	[user_specified_monitor] [bit] NULL,
	[monitor_server_security_mode] [bit] NOT NULL,
	[last_backup_file] [nvarchar](500) NULL,
	[last_backup_date] [datetime] NULL,
	[backup_compression] [tinyint] NOT NULL,
PRIMARY KEY CLUSTERED 
(
	[primary_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
UNIQUE NONCLUSTERED 
(
	[primary_database] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO


USE [msdb]
/****** Object:  Index [nc1lsprimary_databases]    Script Date: 11/19/2013 20:08:20 ******/
CREATE NONCLUSTERED INDEX [nc1lsprimary_databases] ON [dbo].[log_shipping_primary_databases] 
(
	[monitor_server] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO


USE [msdb]
/****** Object:  Index [nc2lsprimary_databases]    Script Date: 11/19/2013 20:08:20 ******/
CREATE NONCLUSTERED INDEX [nc2lsprimary_databases] ON [dbo].[log_shipping_primary_databases] 
(
	[user_specified_monitor] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO


USE [msdb]
/****** Object:  Index [uc1lsprimary_databases]    Script Date: 11/19/2013 20:08:20 ******/
CREATE UNIQUE NONCLUSTERED INDEX [uc1lsprimary_databases] ON [dbo].[log_shipping_primary_databases] 
(
	[primary_database] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

ALTER TABLE [dbo].[log_shipping_primary_databases] ADD  DEFAULT ((2)) FOR [backup_compression]
GO


ну а что, ляп он и есть ляп.
может, 2 разных человека писало: один определение таблиц,
другой им всем индексы.
а может, один и тот же, но спустя 2 часа
бывает же, отвлекут, сообщат что-то "хорошее", вернешься к компу уже другим человеком

не то, чтобы "не рой яму другому",
но примерно так: оставили возможность дублировать индексы, сами в свою же лужу и сели.
напишите гражданке Kimberly Tripp, может, это ей поможет пропихнуть идею запрета задвоения индексов МС-овцам
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470633
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в скуле в системных объектах вообще можно найти много замечательных моментов
ничего удивительного - писано всё это людьми, долгие годы, "работает - не трогай"
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470653
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oну а что, ляп он и есть ляп.
может, 2 разных человека писало: один определение таблиц,
другой им всем индексы.
а может, один и тот же, но спустя 2 часа
бывает же, отвлекут, сообщат что-то "хорошее", вернешься к компу уже другим человеком

не то, чтобы "не рой яму другому",
но примерно так: оставили возможность дублировать индексы, сами в свою же лужу и сели.
напишите гражданке Kimberly Tripp, может, это ей поможет пропихнуть идею запрета задвоения индексов МС-овцам
А она что, не знает?

Может быть существует сценарий, которого мы не знаем, когда задвоение помогает или необходимо.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470686
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree
Может быть существует сценарий, которого мы не знаем, когда задвоение помогает или необходимо.ONLINE INDEX REBUILD?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470690
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
SandalTreeА она что, не знает?

я думаю, ей и так есть, чем заняться, кроме как ходить-проверять, какие там индексы на таблицах в msdb.
да и другие вряд ли заметили:
log_shipping_primary_databases Stores one record for the primary database in a log shipping configuration.
это сколько ж надо баз залогшипить, чтоб тормоза на этой таблице прочувствовать?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470727
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindSandalTreeМожет быть существует сценарий, которого мы не знаем, когда задвоение помогает или необходимо.ONLINE INDEX REBUILD?
Вы это имели в виду?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Use TempDB
GO
CREATE TABLE B(F1 Char(1)  NOT NULL, CONSTRAINT UC_B UNIQUE (F1));
GO
INSERT INTO B(F1) VALUES ('A'), ('B')
GO
CREATE NONCLUSTERED INDEX NCIX_B ON B(F1)
GO
ALTER INDEX [UC_B] ON [dbo].[B] REBUILD WITH (ONLINE = ON)
GO
ALTER INDEX [NCIX_B] ON [dbo].[B] REBUILD WITH (ONLINE = ON)
GO
DROP TABLE B
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470728
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oSandalTreeА она что, не знает?

я думаю, ей и так есть, чем заняться, кроме как ходить-проверять, какие там индексы на таблицах в msdb.
да и другие вряд ли заметили:
log_shipping_primary_databases Stores one record for the primary database in a log shipping configuration.
это сколько ж надо баз залогшипить, чтоб тормоза на этой таблице прочувствовать?Ну вот, ей и так есть чем заняться, зачем её понапрасну беспокоить.

Проблема выеденного яйца не стоит.
Я-б сравнил её с царапиной на ядерной боеголовке, ни на скорость ни на силу заряда она не влияет. Лишь коробит чувства генералов при проверке.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470771
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindSandalTreeМожет быть существует сценарий, которого мы не знаем, когда задвоение помогает или необходимо.ONLINE INDEX REBUILD?
А чем тут поможет задвоение индексов?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470773
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
Гость333,

при онлайновом ребилде он не в таблицу лезет, а строит новый некластерный, используя старый некластерный
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470784
Гость333
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryИ если я создам недублированный индекс, который не используется ни в одном запросе, то это никак не отразится на performance ?
А вот если создан дублированный, то сразу отразится ?
Негативно отразятся и тот, и другой.

Я имел в виду, что если по показаниям sys.dm_db_index_usage_stats недублированный индекс не используется, это не значит, что его тут же можно удалять. Он становится кандидатом на удаление, требует дальнейшего анализа.

Пример — один "молодой, горячий" DBA заказчика прислал список не использующихся индексов (по показаниям sys.dm_db_index_usage_stats). Анализ списка, длившийся больше половины рабочего дня, показал:
— некоторые индексы используются в месячных/квартальных отчётах, а аптайм сервера был около трёх недель, и статистика ещё не захватила построение этих отчётов;
— некоторые индексы были построены на таблицах вида DATA_2008_05 (некие данные были секционированы — по одной таблице на каждый месяц). Обращение к старым данным могло требоваться крайне редко — и попадания индекса в статистику использования пришлось бы ждать долго;
— но всё же два или три индекса по результатам анализа были удалены.

А если бы в этом списке были дублированные индексы — то и анализ бы не требовался. Сразу можно было бы писать скрипт на удаление одного из индексов, да ещё поискать в исходном коде возможные хинты с использованием удаляемого индекса и заменить на оставшийся индекс.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470787
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeЧем отличается PRIMARY KEY от UNIQUE CONSTRAINT?

Правильный ответ, за который надо сразу брать на работу:

НИЧЕМ, кроме названия и мелких, несущественных деталей.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470816
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree Если я их нечаянно попутал вы теперь над моим ником упражняться будете?
за нечаянно бью отчаянно (С) :)
тогда приношу свои извинения
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38470916
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeКакая-б не была сущность декларативная или физическая, но когда у тебя есть конкретная задача у тебя стоит вопрос "что применить?". И только зная точные различия между ними можно принять правильное решение.
Мда.
Constraint-ы применяются для обеспечения data integrity.
Индексы применяют для улучшения производительности.
И это разные по своим целям задачи.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38471639
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeКакая-б не была сущность декларативная или физическая, но когда у тебя есть конкретная задача у тебя стоит вопрос "что применить?". И только зная точные различия между ними можно принять правильное решение.
Мда.
Constraint-ы применяются для обеспечения data integrity.
Индексы применяют для улучшения производительности.
И это разные по своим целям задачи.
Согласен на 100 %

Но приведу пример. Есть табличка с UNIQUE CONSTRAINT
Код: sql
1.
2.
3.
CREATE TABLE B(F1 Char(1)  NOT NULL, F2 Char(2), F3 INT, CONSTRAINT UC_B UNIQUE (F1,F2));
GO
INSERT INTO B(F1,F2,F3) VALUES ('A','C',1), ('B','D',2), ('B','E',3), ('A','E',4);

У тебя тормозит запрос
Код: sql
1.
SELECT F1,F2,F3 FROM B WHERE F2 = 'E'

Есть вариант создать индекс
Код: sql
1.
CREATE UNIQUE NONCLUSTERED INDEX NCIX_B ON B(F2,F1) INCLUDE(F3);

Который решит проблему, но тогда первый индекс, созданый констрэйнтом использоваться уже не будет, а будет только занимать место и тормозить вставку.
На маленьких табличках это возможно и ничего, но если у тебя 100 миллионов записей, а в уникальную группу входят несколько полей, то это очень существенно.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38471749
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeКоторый решит проблему, но тогда первый индекс, созданый констрэйнтом использоваться уже не будет
Что значит "не будет" ?
Еще как будет. Для чего тогда CONSTRAINT то создавался ?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38471777
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeЭто хорошее обьяснение. Самое замечательное в нём что можно оправдать ЛЮБОЙ ляп.Не несите пурги.
Поняли что сморозили уйню, и теперь отмазывайтесь.

авторONLINE INDEX REBUILD?Не будет одновременно существовать (использоваться) и строится новый. И главное - в новую файловую группу, это фишки только последних версий скуля, не все типы индексов можно делать ONLINE.
Так что до отделения физики от логики ещё очень далеко. Надо хотя бы увидеть зачатки сложных CONSTRAINT-ов в стандарте SQL, что бы можно было об этом говорить.

o-oнапишите гражданке Kimberly Tripp, может, это ей поможет пропихнуть идею запрета задвоения индексов МС-овцамНе получится. Если WARNING - буду не против, точнее за. Если запрет - уйдёте в минуса в голосовалке - будьте уверены.
Но в MS ещё не сидят такие "спецы" как в этом топике. Это будет проигнорировано.

Более того, эта логическая проверка царапина на поверхности айсберга. В нормальных конторах есть системы статического анализа структуры БД. Такие вещи просто детский лепет.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38471781
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeКоторый решит проблему, но тогда первый индекс, созданый констрэйнтом использоваться уже не будет
Что значит "не будет" ?
Еще как будет. Для чего тогда CONSTRAINT то создавался ?Извиняюсь, не так выразился. Он будет использоваться констрэйнтом, но не будет использоваться для SEEK. Если CONSTRAINT удалить, то integrity не пострадает, так как индекс и так уникален.

Я понимаю что может найтись человек, который решит изменить или удалить этот индекс, тем самым поставив под угрозу integrity, ну так ведь и CONSTRAINT точно так-же беззащитен от неправомерных действий.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38471826
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
Mnioro-oнапишите гражданке Kimberly Tripp, может, это ей поможет пропихнуть идею запрета задвоения индексов МС-овцамНе получится. Если WARNING - буду не против, точнее за. Если запрет - уйдёте в минуса в голосовалке - будьте уверены.

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

SQL Server has a horrible habit of letting bad habits move forward (for the sake of backward compatibility [e.g. autoshrink]). And, I do understand *some* of the reasons for allowing some of these “features/options” to move forward. However, there are a few that frustrate me and I’ve talked about this one quite often.

SQL Server lets you create completely redundant and totally duplicate indexes.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38471830
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MniorSandalTreeЭто хорошее обьяснение. Самое замечательное в нём что можно оправдать ЛЮБОЙ ляп.Не несите пурги.
Поняли что сморозили уйню, и теперь отмазывайтесь.

авторONLINE INDEX REBUILD?Не будет одновременно существовать (использоваться) и строится новый. И главное - в новую файловую группу, это фишки только последних версий скуля, не все типы индексов можно делать ONLINE.
Так что до отделения физики от логики ещё очень далеко. Надо хотя бы увидеть зачатки сложных CONSTRAINT-ов в стандарте SQL, что бы можно было об этом говорить.

Покажите пожалуйста на примере случай необходимости дублирующего индекса.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38471860
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeИзвиняюсь, не так выразился. Он будет использоваться констрэйнтом, но не будет использоваться для SEEK. Если CONSTRAINT удалить, то integrity не пострадает, так как индекс и так уникален..
как раз будет использоваться для SEEK, попробуйте
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38471903
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShakillSandalTreeИзвиняюсь, не так выразился. Он будет использоваться констрэйнтом, но не будет использоваться для SEEK. Если CONSTRAINT удалить, то integrity не пострадает, так как индекс и так уникален..
как раз будет использоваться для SEEK, попробуйте
Может мы говорим о различных запросах? Посмотрите на мои результаты. Они отличаются от ваших?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SET NOCOUNT ON
GO
USE tempdb
GO
CREATE TABLE B(F1 Char(1)  NOT NULL, F2 Char(2), F3 INT, CONSTRAINT UC_B UNIQUE (F1,F2));
GO
INSERT INTO B(F1,F2,F3) VALUES ('A','C',1), ('B','D',2), ('B','E',3), ('A','E',4);
GO
SET STATISTICS PROFILE ON
GO
SELECT F1,F2,F3 FROM B WHERE F2 = 'E'
GO
SET STATISTICS PROFILE OFF
GO
CREATE UNIQUE NONCLUSTERED INDEX UNCIX_B ON B(F2,F1) INCLUDE(F3);
GO
SET STATISTICS PROFILE ON
GO
SELECT F1,F2,F3 FROM B WHERE F2 = 'E'
GO
SET STATISTICS PROFILE OFF
GO
DROP TABLE B
GO
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38471912
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeИзвиняюсь, не так выразился. Он будет использоваться констрэйнтом, но не будет использоваться для SEEK. Если CONSTRAINT удалить, то integrity не пострадает, так как индекс и так уникален.
А потом вам захочется поменять индекс, чтобы другие запросы еще лучше работали и прощай дата интегрити ?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38471982
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeИзвиняюсь, не так выразился. Он будет использоваться констрэйнтом, но не будет использоваться для SEEK. Если CONSTRAINT удалить, то integrity не пострадает, так как индекс и так уникален.
А потом вам захочется поменять индекс, чтобы другие запросы еще лучше работали и прощай дата интегрити ?Т.е. у нас на лицо инженерное противоречие.

Затраты дискового пространства и падение производительности против гипотетической возможности потерять дата интегрити.

Нужно либо смириться с издержками, либо принять меры (вплоть до административных) против "возможности потерять дата интегрити".

Будем спорить дальше?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472005
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeShakillпропущено...

как раз будет использоваться для SEEK, попробуйте
Может мы говорим о различных запросах? Посмотрите на мои результаты. Они отличаются от ваших?
ну так понятное дело, индекс будет использован при соответствующем WHERE. то есть в вашем примере индекс "от констрейнта" пригодится в случае фильтра с F1, а второй индекс - при фильтре с F2.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472013
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree,

Ваш пример некорректен. Если у вас нет запросов с where F1 = ..., то почему порядок столбцов в unique constraint (F1, F2)?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472055
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeНужно либо смириться с издержками, либо принять меры (вплоть до административных) против "возможности потерять дата интегрити".

Будем спорить дальше?
Это какие "меры (вплоть до административных) " ? Создать таки constarint ? Или уволить дба ?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472077
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
SandalTree у нас на лицо инженерное противоречие.

Затраты дискового пространства и падение производительности против гипотетической возможности потерять дата интегрити.

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




пафосно.
не оставляет чувство присутствия на комсомольском собрании...
+ мне все упорнее кажется, что товарищу скучно.
ну просто очень хочется поговорить , да не с кем (не о чем?)

SandalTree, пойдемте в какое-нибудь "обо всем", обсудим происшествия дня :)
мне вот только что в автобусе какая-то продиравшаяся к дверям туша перекосила очки.
дома уже пытаюсь почитать форум,
соседнюю тему вижу как "данные в ПОПЕ разных типов".
интересно, последствия контакта с тушей или просто день сегодня такой?
еще и тел. остался в сортире уникредита, может, поэтому я все так "туалетно" вижу?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472080
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakillну так понятное дело, индекс будет использован при соответствующем WHERE. то есть в вашем примере индекс "от констрейнта" пригодится в случае фильтра с F1, а второй индекс - при фильтре с F2.invmВаш пример некорректен. Если у вас нет запросов с where F1 = ..., то почему порядок столбцов в unique constraint (F1, F2)?Попробуйте так
Код: sql
1.
CREATE TABLE B(F1 Char(1)  NOT NULL, F2 Char(2), F3 INT, CONSTRAINT UC_B UNIQUE (F2, F1));

Ничего не изменится.

Вы наверное не заметили " INCLUDE(F3)"
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472094
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeНужно либо смириться с издержками, либо принять меры (вплоть до административных) против "возможности потерять дата интегрити".

Будем спорить дальше?
Это какие "меры (вплоть до административных) " ? Создать таки constarint ? Или уволить дба ?Можно просто забрать права с рабочего сервера.
Можно поставить триггер, который будет запрещать изменение индекса.

Вам-ли не знать.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472134
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeНичего не изменится.Конечно не изменится - данных в таблице слишком мало.
SandalTreeВы наверное не заметили " INCLUDE(F3)"Все я заметил. Уберите его и получите тот же самый Table scan на ваших данных.
Опять же, если известно, что потребуются include-столбцы, зачем тогда делать ограничение уникальности, а не сразу уникальный индекс?
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472192
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeМожно просто забрать права с рабочего сервера.
Можно поставить триггер, который будет запрещать изменение индекса.

Вам-ли не знать.
Ваши рассуждения напоминают рассказ "100 способов использования микроскопа"
1. колоть орехи
2. забивать гвозди
...
100. да и еще им можно проводить исследования мелких объектов
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472199
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm Опять же, если известно, что потребуются include-столбцы, зачем тогда делать ограничение уникальности, а не сразу уникальный индекс?
О!

Вот именно это я и пытаюсь доказать.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472202
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlorySandalTreeМожно просто забрать права с рабочего сервера.
Можно поставить триггер, который будет запрещать изменение индекса.

Вам-ли не знать.
Ваши рассуждения напоминают рассказ "100 способов использования микроскопа"
1. колоть орехи
2. забивать гвозди
...
100. да и еще им можно проводить исследования мелких объектов

Зачем скатываться на личности?

Мы уже давно перешли в плоскость религиозных предпочтений.

Нравится вам дублировать индексы - дублируйте.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472245
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oне оставляет чувство присутствия на комсомольском собрании...
+ мне все упорнее кажется, что товарищу скучно.
ну просто очень хочется поговорить , да не с кем (не о чем?)Он сам не знает чего хочет.
Это его проблемы, всем же понятно что пурга.
Если тролит, то явно не получается.
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472249
Фотография SandalTree
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mnioro-oне оставляет чувство присутствия на комсомольском собрании...
+ мне все упорнее кажется, что товарищу скучно.
ну просто очень хочется поговорить , да не с кем (не о чем?)Он сам не знает чего хочет.
Это его проблемы, всем же понятно что пурга.
Если тролит, то явно не получается.

...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38472438
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTreeМы уже давно перешли в плоскость религиозных предпочтений.
Базовый понятия - это не предпочтения
Нормальные формы, целостность данных и тп - это основы.
Но если вам нравится жить без них, то это ваше право.
Вы можете даже, например, хранить все данные в текстовых блоб полях.
Потому что тип данных - это тоже элемент поддержания целостности данных
...
Рейтинг: 0 / 0
Вопрос на собеседовании
    #38473367
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Троллинг на троллинг конечно красиво смотрится, я бы сказал тренд.
Не думаю что это когда-то приестся, но точно видно - что уже не различается что к чему и для чего.
...
Рейтинг: 0 / 0
122 сообщений из 122, показаны все 5 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос на собеседовании
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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