|
Некластерный индекс по полям кластерного. В чем фишка?
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=46&msg=40065650&tid=1684678]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 294ms |
total: | 463ms |
0 / 0 |