|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Рассматриваю базу. Наткнулся на такой интересный прием. На таблице могут висеть одновременно кластерный и некластерный индекс. В чем преимущество данного метода перед "просто кластерным"? Или я чего-то не замечаю? Скрипты прилагаю Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 15:04 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Ну... если основной запрос exists( select * from table where ID = @ID) то это будут чуток бодрее. Но надо поставить UNIQUE. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 15:36 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
ну, там вообще основной поиск ведется по другим полям, так что прибавка шустрости не гарантируется :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 15:50 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
godsql ну, там вообще основной поиск ведется по другим полям, так что прибавка шустрости не гарантируется :) тогда содержание некластерного индекса это - пустая трата свободного места. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 15:56 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
godsql, Ну например, select count(*) from dbo.T1 with (index = PK_T1) будет а) значительно быстрее, если таблица широкая и б) не будет ждать завершения обновлений таблицы из других сеансов. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 16:45 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
godsql На таблице могут висеть одновременно кластерный и некластерный индекс.Я бы предположил Бритву Хэнлона Скрипт для кластерного индекса генерировался роботом, а некластерного человеком. Я бы на вашем месте прогнал скриптик по другим таблицам/индексам https://www.sqlservercentral.com/articles/finding-and-eliminating-duplicate-or-overlapping-indexes-1 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 17:56 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
в общем, понятно. Сильно специфичное использование. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 17:58 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
SERG1257 godsql На таблице могут висеть одновременно кластерный и некластерный индекс. Скрипт для кластерного индекса генерировался роботом, а некластерного человеком. Если я начну копаться основательно, то основную работу делать не смогу :) Там такой ужас, что кажется, что это студенты писали. Хотя стоит эта хрень - дофига. Правлю то, с чем работаю. За статью спасибо, почитаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 18:07 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
godsql Если я начну копаться основательно, то основную работу делать не смогу :) Там такой ужас, что кажется, что это студенты писали. Хотя стоит эта хрень - дофига.это норма (с) Елена Малышева Я бы предложил прогнать скриптик чтобы получить список подозрительных индексов (это быстро). Кстати не забывайте про INCLUDE поля. Далее, некластерные индексы с идентичным набором полей (как в вашем случае) это абсолютное зло и кандидат на удаление. Если боитесь удалять (запрещено вендором) - есть вариант с disable https://docs.microsoft.com/en-us/sql/relational-databases/indexes/disable-indexes-and-constraints?view=sql-server-ver15 Засада может быть только если имя индекса используется как подсказка в запросах (см пример от invm) В случае частичного пересечения не все так однозначно. Если будете копать, то посмотрите в сторону утилиты от Брента Озара https://www.brentozar.com/blitzindex/ https://www.brentozar.com/blitzindex/sp_blitzindex-duplicate-indexes/ ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2021, 20:59 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
godsql, Если есть запросы, которые выбирают только ID то м.б. профит от покрытия такого запроса некластерным индексом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2021, 18:52 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Возможно, что второй индекс (nonclustered) был изначально [ID] DEsc (а не [ID] ASC), и использовался для а) выборки последних Икс айдишников (select top 10 id from table (noock) order by id desc), б) для избегания блокировок при быстром сёрфинге по таблице (с тем же nolock-ом, например) ... Короткевич про что-то похожее, кстати, когда-то рассказывал. Но я точно не помню. Извините, есличо ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2021, 20:01 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
SIMPLicity_ был изначально [ID] DEsc (а не [ID] ASC), и использовался для а) выборки последних Икс айдишников (select top 10 id from table (noock) order by id desc),А вот с этого места поподробнее. Я всю жизнь был уверен что сервер прекрасно умеет ASC индекс для desc запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2021, 20:24 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Ради эксперимента сделал запросы Select top 200000 * from table order by id asc Select top 200000 * from table order by id desc Везде используется Скан кластерного индекса (Отсортировано = true) время выборки приблизительно одинаковое, причем desc - выигрывает и по количеству логических чтений (3785 против 4266), так и по затраченному времени ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2021, 21:52 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
godsql Ради эксперимента сделал запросы Select top 200000 * from table order by id asc Select top 200000 * from table order by id desc Везде используется Скан кластерного индекса (Отсортировано = true) время выборки приблизительно одинаковое, причем desc - выигрывает и по количеству логических чтений (3785 против 4266), так и по затраченному времени Кластерный индекс - это и есть вся таблица. А в топике речь о не кластерном индексе. В нём не хранится ничего, кроме ID. Потому и места на диске он займёт сильно меньше. Соответственно, запросы вида SELECT COINT(*) FROM table, или SELECT TOP 1 ID FROM table ORDER BY ID DESC, или EXISTS(SELECT * FROM table WHERE ID = @ID) будут обращаться только к этом индексу и потребуют на порядки меньше операций чтения страниц. Попробуйте вот эти запросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2021, 23:02 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
aleks222 Ну... если основной запрос exists( select * from table where ID = @ID) то это будут чуток бодрее. Но надо поставить UNIQUE. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2021, 23:03 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
SERG1257 SIMPLicity_ был изначально [ID] DEsc (а не [ID] ASC), и использовался для а) выборки последних Икс айдишников (select top 10 id from table (noock) order by id desc), Я всю жизнь был уверен что сервер прекрасно умеет ASC индекс для desc запросов.Умеет, не вопрос. Проблема в том, что почему-то в MSSQL не реализован параллелизм для таких запросов. Desc поиск по asc индексу всегда будет однопоточным. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2021, 03:09 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Ведущий профессионал aleks222 Ну... если основной запрос exists( select * from table where ID = @ID) то это будут чуток бодрее. Но надо поставить UNIQUE. Чтению обучают в первом классе. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2021, 06:58 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Скрипт на существующий кластерный индекс и создание нового, идентичного но НЕкластерного, с обратной сортировкой Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вероятно есть какие-то причины использования НЕкластерного индекса. Запрос отработал (почему-то) вот так: ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2021, 23:34 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
SIMPLicity_ Скрипт на существующий кластерный индекс и создание нового, .... И да, MSSQL 2019, живая система,- да простят меня все за мои эксперименты на продакшне,- в таблице чуть менее 130 тыс строк. Ресурсов в достатке. особенно ночью ;) ... PS Необычно ещё и то, что поле является единственным полем класт. первичного ключа - PRIMARY KEY CLUSTERED ( [posting_number] ASC ) - но первичный ключ использован не был (на скрине фактический план) . Возможно MSSQL стал настолько умён, что для м**ацких запросов старается избегать блокировок ресурсов (в данном случае - всей таблицы ибо сканится кластерный индекс). PS Есличо - могу ошибаться - готов выслушать критику.... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2021, 23:37 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
godsql Ради эксперимента сделал запросы Select top 200000 * from table order by id asc Select top 200000 * from table order by id desc Везде используется Скан кластерного индекса (Отсортировано = true) время выборки приблизительно одинаковое, причем desc - выигрывает и по количеству логических чтений (3785 против 4266), так и по затраченному времени Коллега, у Вас оба индекса ASC. А то что второй был изначально DESC ,- это было всего лишь МОЁ ПРЕДПОЛОЖЕНИЕ,- не более... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2021, 23:51 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
SIMPLicity_ SIMPLicity_ Скрипт на существующий кластерный индекс и создание нового, .... И да, MSSQL 2019, живая система,- да простят меня все за мои эксперименты на продакшне,- в таблице чуть менее 130 тыс строк. Ресурсов в достатке. особенно ночью ;) ... PS Необычно ещё и то, что поле является единственным полем класт. первичного ключа - PRIMARY KEY CLUSTERED ( [posting_number] ASC ) - но первичный ключ использован не был (на скрине фактический план) . Возможно MSSQL стал настолько умён, что для м**ацких запросов старается избегать блокировок ресурсов (в данном случае - всей таблицы ибо сканится кластерный индекс). PS Есличо - могу ошибаться - готов выслушать критику.... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 08:05 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
godsql в общем, понятно. Сильно специфичное использование. Я бы сказал, что с вероятность 99% - это чьи-то кривые руки, возможно, после задачи типа "сделай индексы на все ID-поля". Рекорд, который я встречал, это кластерный + 4 идентичных ему некластерных на немаленькой таблице ) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 14:31 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Критик, а вот здесь что лишнее? :) ALTER TABLE [dbo].[tbl_Primer] ADD CONSTRAINT [PK8reomM] PRIMARY KEY NONCLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO CREATE UNIQUE CLUSTERED INDEX [ClustPrimaKeyIx] ON [dbo].[tbl_Primer] ( [Id] 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, FILLFACTOR = 80) ON [PRIMARY] GO ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 16:31 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Помнится, старые версии PowerDesigner так делали, если сразу не запретить. Там для MSSQL в дефолтных настройках было что-то типа "создавать индекс на каждый PK и UQ". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 17:56 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
StarikNavy Критик, а вот здесь что лишнее? :) ALTER TABLE [dbo].[tbl_Primer] ADD CONSTRAINT [PK8reomM] PRIMARY KEY NONCLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO CREATE UNIQUE CLUSTERED INDEX [ClustPrimaKeyIx] ON [dbo].[tbl_Primer] ( [Id] 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, FILLFACTOR = 80) ON [PRIMARY] GO у меня подобные 2 индекса, ПК и уникальный, один кластерный, другой некластерный, на широченной таблице. некластерный, разумеется, гораздо меньше весит, лично мне надо для проверки ФК, ибо на эту таблицу смотрит туча других. вот статистика по чтениям, сервер еще как обрадовался новому некластерному и юзает его, хотя сделан не так давно: ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 19:01 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
да, пардон, первая колонка sum_ss это user_seeks + user_scans из sys.dm_db_index_usage_stats ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2021, 19:03 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Yasha123 у меня подобные 2 индекса, ПК и уникальный, один кластерный, другой некластерный, на широченной таблице. некластерный, разумеется, гораздо меньше весит, лично мне надо для проверки ФК, ибо на эту таблицу смотрит туча других. вот статистика по чтениям, сервер еще как обрадовался новому некластерному и юзает его, хотя сделан не так давно: А не могли бы вы написать список полей обоих индексов для понимания? А то что-то я не догоняю, в чём смысл. Было бы интересно понять это решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2021, 13:06 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Кесарь Yasha123 у меня подобные 2 индекса, ПК и уникальный, один кластерный, другой некластерный, на широченной таблице. некластерный, разумеется, гораздо меньше весит, лично мне надо для проверки ФК, ибо на эту таблицу смотрит туча других. вот статистика по чтениям, сервер еще как обрадовался новому некластерному и юзает его, хотя сделан не так давно: А не могли бы вы написать список полей обоих индексов для понимания? А то что-то я не догоняю, в чём смысл. Было бы интересно понять это решение. Насколько я понял: если индекс используется для выборки нескольких/многих/всех полей из этой же таблицы - используется кластерный индекс. Если индекс используется только как ссылочный элемент/малая выборка - используется некластерный индекс ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2021, 21:28 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Это, увы, очень часто встречающаяся ситуация :( Кластерный индекс по IDENTITY да ещё и первичный ключ - это вершина безграмотности дизайнера таблицы :) Вспомните труды одного славного парня, который таких горемык называл айдиотами Кластерный индекс хорош при просмотрах полных и не полных, и когда нужно выдать много колонок. Некластерный индек как раз для поиска хорошо работает, и первичный ключ по некластерному тут будет оптимизатору завсегда удобней. То, что встречаются такие "сладкие" парочки с дублем колонок кластерного индекса - это компромис, чтобы малой кровью исправить чью то глупость. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 10:25 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Александр Гладченко Кластерный индекс по IDENTITY да ещё и первичный ключ - это вершина безграмотности дизайнера таблицы Вы же взрослый, опытный человек, а так безапелляционный несете чушь. Я сходу назову две ситуации, при которых "кластерный индекс по IDENTITY да ещё и первичный ключ" лучший (если не единственный вариант) 1. Таблица а-ля очередь, к которой все запросы имею вид select top N ... from ... where id > @id order by id 2. Таблица, к которой все (ну или основная масса) запросы идут только по конкретному id. И вместо одного описка по кластерному индексу, вы предлагаете к поиску по обычному индексу добавить lookup из кластерного. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 10:34 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
msLex, Читайте внимательно то, что критикуете :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 10:37 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Александр Гладченко msLex, Читайте внимательно то, что критикуете :) Я прекрасно прочитал ваш пост полностью, и никакой "не кванторности" в нем нет. Все предельно просто и ясно. "Сделал кластерный PK по ID - безграмотный дизайнер таблиц!" ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 10:40 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
msLex, Вы же взрослый и опытный человек, а никак читать не научитесь?! Почему Вы забыли о контексте обсуждений? Вы ещё мне вмените таблицы, используемые для связей... Если для нормальной работы рядом с кластерным индексом приходится делать такой же не кластерный - речь об этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 10:45 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Александр Гладченко msLex, Вы же взрослый и опытный человек, а никак читать не научитесь?! Почему Вы забыли о контексте обсуждений? Вы ещё мне вмените таблицы, используемые для связей... Если для нормальной работы рядом с кластерным индексом приходится делать такой же не кластерный - речь об этом. Я достаточно хорошо читаю, чтобы видеть в вашем сообщении (даже в контексте обсуждения исходной проблемы) четкий посыл: кластерный по ID - бездарь. Обычно, в случаях когда хотят подчеркнуть частые ошибки или некие паттерны проектирования, используют слова вида "В большинстве случаев", "Очень редко" и т.п. В вашем же сообщении, утверждение совершенно безапелляционны. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 10:51 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
msLex, Привет от Целко :) Да, безапеляционны, потому что исключения очень редки, а айдиотизм я встречаю повсюду и массово. Десеть раз подумайте, прежде чем сделать ID кластеризованным первичным ключом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 10:53 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Александр Гладченко Привет от Целко :) Спасибо. И ему тоже. Александр Гладченко Десеть раз подумайте, прежде чем сделать ID кластеризованным первичным ключём. Десять раз подумать нужно перед выбором любого из полей в качестве PK, ключа кластерного индекса и много еще чего. Но это не делает "айдиотом" того, кто сделал этот выбор обдуманно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 11:00 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
msLex, Вот с этим я не буду спорить, т.к. это и хотел сказать, только в "шутливой" форме :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 11:03 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Александр Гладченко Это, увы, очень часто встречающаяся ситуация :( Кластерный индекс по IDENTITY да ещё и первичный ключ - это вершина безграмотности дизайнера таблицы :) Вспомните труды одного славного парня, который таких горемык называл айдиотами Кластерный индекс хорош при просмотрах полных и не полных, и когда нужно выдать много колонок. Некластерный индек как раз для поиска хорошо работает, и первичный ключ по некластерному тут будет оптимизатору завсегда удобней. Александр, вы имеете в виду, что кластерный индекс должен включать все поля таблицы или весьма значительную их часть? Но то, что вы называете глупостью, используется например в одной известной вам компании в комплексе учётных систем, и всё в целом работает неплохо даже после дикого роста последних лет. Не без проблем, конечно, но работает. И делали не самые глупые люди. Которые и на этом форуме присутствовали несколько ранее. Как же так? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 11:13 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Ситуации могут быть разными и нельзя сказать, что в подавляющем количестве случаев выбор нумератора в качестве кластерного ключа - наихудший вариант. Соглашусь с msLex, в том, что необходима оценка практичности такого решения с учетом особенностей индексов в кластеризованных таблицах. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 11:54 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
msLex Александр Гладченко Кластерный индекс по IDENTITY да ещё и первичный ключ - это вершина безграмотности дизайнера таблицы Вы же взрослый, опытный человек, а так безапелляционный несете чушь. Я сходу назову две ситуации, при которых "кластерный индекс по IDENTITY да ещё и первичный ключ" лучший (если не единственный вариант) 1. Таблица а-ля очередь, к которой все запросы имею вид select top N ... from ... where id > @id order by id 2. Таблица, к которой все (ну или основная масса) запросы идут только по конкретному id. И вместо одного описка по кластерному индексу, вы предлагаете к поиску по обычному индексу добавить lookup из кластерного. Как минимум - есть еще один + -- int identity еще и лёгкий. https://www.sql.ru/articles/mssql/03013101indexes.shtmlКаждый некластерный индекс будет использовать значения кластерного индекса. Следовательно увеличение размера кластерного индекса приводит к многократному увеличению требований по памяти для всех не кластерных индексов. Последнее приводит к увеличению времени на процессы чтения, сканирования данных и, как следствие, к снижению общей производительности системы. Еще одно наблюдение – увеличение длины ключа приводит к снижению количества записей индекса, способных уместиться в пределах одной страницы, как следствие – к увеличению операций чтения-записи. Рис.6 показывает как строится некластерный индекс поверх кластерного. https://www.sql.ru/articles/mssql/03013101indexes.shtml Сходу, кластерный индекс, отличный от синтетического PK - хорош только в неизменяемых справочниках, ну, еще иногда в хранилищах. А в OLTP доступ обычно к конкретной записи, по конкретному, совершенно абстрактному и не привязанному к смыслу хранимых данных ключу. Какой вариант подходит лучше чем int identity? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 14:47 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
uaggster Сходу, кластерный индекс, отличный от синтетического PK - хорош только в неизменяемых справочниках, ну, еще иногда в хранилищах. А в OLTP доступ обычно к конкретной записи, по конкретному, совершенно абстрактному и не привязанному к смыслу хранимых данных ключу. Какой вариант подходит лучше чем int identity? Bigint очевидно! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 14:50 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
uaggster Сходу, кластерный индекс, отличный от синтетического PK - хорош только в неизменяемых справочниках, ну, еще иногда в хранилищах. А вот это точно не так. Любые запросы по некластерному индексу, будут требовать либо включения всех требуемых полей в include секцию, что приводит и к увеличению объема данных, и к большему количеству операций при модификации данных, либо к появлению key lookup-ов. Причем, если поиск сам поиск группы значений в некластерном будет выполнятся за один "спуск по дереву" и последующий range scan, то каждый key lookup, это отдельный поиск в кластерном индексе, и он очень сильно замедляет скорость выполнения запроса. Классический (для меня) пример плохого кластерного по id я первый раз увидел лет 15 назад. Обычная таблица документов (счета и т.п.) с кластерным индексом по ID и основные запросы вида select .. from .. where create_date beetwen .... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 15:01 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Но тогда как совместить? это: "Каждый некластерный индекс будет использовать значения кластерного индекса. Следовательно увеличение размера кластерного индекса приводит к многократному увеличению требований по памяти для всех не кластерных индексов." с этим: msLex Любые запросы по некластерному индексу, будут требовать либо включения всех требуемых полей в include секцию, что приводит и к увеличению объема данных, и к большему количеству операций при модификации данных, либо к появлению key lookup-ов. Видимо уменьшением кластерного индекса до ровно одного поля с ID, покрывающими индексами и наконец уменьшением ширины таблицы. С вынесением всех необязательных, справочных, "плавающих" данных в присоединённые таблицы, строго специализированные (в них стараться иметь минимум полей и кластерный индекс по всем полям). msLex Классический (для меня) пример плохого кластерного по id я первый раз увидел лет 15 назад. Обычная таблица документов (счета и т.п.) с кластерным индексом по ID и основные запросы вида select .. from .. where create_date beetwen .... А как надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 16:16 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Кесарь msLex Классический (для меня) пример плохого кластерного по id я первый раз увидел лет 15 назад. Обычная таблица документов (счета и т.п.) с кластерным индексом по ID и основные запросы вида select .. from .. where create_date beetwen .... А как надо? для этого конкретного запроса, идеальным будет кластерный индекс по create_date ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 16:24 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
msLex Кесарь пропущено... А как надо? для этого конкретного запроса, идеальным будет кластерный индекс по create_date Ну знаете, так я и сам ответить могу. Очевидно в жизни к таблице обращаются не с одним видом запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 16:27 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Кесарь msLex пропущено... для этого конкретного запроса, идеальным будет кластерный индекс по create_date Ну знаете, так я и сам ответить могу. Очевидно в жизни к таблице обращаются не с одним видом запроса. Вот некая интегральная оценка частоты и сложности запросов получения и изменения данных и является "мерилом" выбора индексов и всего прочего. В том конкретном случае, на любой запрос по ключу документа был предварительный запрос с получением списка документов за диапазон (сегодня по умолчанию) дат. И кластерный индекс по create_date был бы оптимальным решением. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 16:44 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
msLex В том конкретном случае, на любой запрос по ключу документа был предварительный запрос с получением списка документов за диапазон (сегодня по умолчанию) дат. И кластерный индекс по create_date был бы оптимальным решением. Кудряво! Ну в таком случае оно конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 16:46 |
|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#18+
Кесарь msLex В том конкретном случае, на любой запрос по ключу документа был предварительный запрос с получением списка документов за диапазон (сегодня по умолчанию) дат. И кластерный индекс по create_date был бы оптимальным решением. Кудряво! Ну в таком случае оно конечно. а если подумать то оказывается что даты как раз хороший кандидат на партицирование, а не кластеризацию ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2021, 19:32 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1684678]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
130ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 238ms |
0 / 0 |