powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Некластерный индекс по полям кластерного. В чем фишка?
23 сообщений из 48, страница 2 из 2
Некластерный индекс по полям кластерного. В чем фишка?
    #40066470
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, пардон, первая колонка sum_ss это user_seeks + user_scans
из sys.dm_db_index_usage_stats
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072437
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123

у меня подобные 2 индекса, ПК и уникальный,
один кластерный, другой некластерный, на широченной таблице.
некластерный, разумеется, гораздо меньше весит,
лично мне надо для проверки ФК, ибо на эту таблицу смотрит туча других.
вот статистика по чтениям, сервер еще как обрадовался новому некластерному и юзает его,
хотя сделан не так давно:


А не могли бы вы написать список полей обоих индексов для понимания? А то что-то я не догоняю, в чём смысл. Было бы интересно понять это решение.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072573
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кесарь
Yasha123

у меня подобные 2 индекса, ПК и уникальный,
один кластерный, другой некластерный, на широченной таблице.
некластерный, разумеется, гораздо меньше весит,
лично мне надо для проверки ФК, ибо на эту таблицу смотрит туча других.
вот статистика по чтениям, сервер еще как обрадовался новому некластерному и юзает его,
хотя сделан не так давно:


А не могли бы вы написать список полей обоих индексов для понимания? А то что-то я не догоняю, в чём смысл. Было бы интересно понять это решение.


Насколько я понял:
если индекс используется для выборки нескольких/многих/всех полей из этой же таблицы - используется кластерный индекс.
Если индекс используется только как ссылочный элемент/малая выборка - используется некластерный индекс
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072631
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это, увы, очень часто встречающаяся ситуация :(
Кластерный индекс по IDENTITY да ещё и первичный ключ - это вершина безграмотности дизайнера таблицы :) Вспомните труды одного славного парня, который таких горемык называл айдиотами
Кластерный индекс хорош при просмотрах полных и не полных, и когда нужно выдать много колонок.
Некластерный индек как раз для поиска хорошо работает, и первичный ключ по некластерному тут будет оптимизатору завсегда удобней.
То, что встречаются такие "сладкие" парочки с дублем колонок кластерного индекса - это компромис, чтобы малой кровью исправить чью то глупость.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072635
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гладченко
Кластерный индекс по IDENTITY да ещё и первичный ключ - это вершина безграмотности дизайнера таблицы


Вы же взрослый, опытный человек, а так безапелляционный несете чушь.


Я сходу назову две ситуации, при которых "кластерный индекс по IDENTITY да ещё и первичный ключ" лучший (если не единственный вариант)

1. Таблица а-ля очередь, к которой все запросы имею вид select top N ... from ... where id > @id order by id
2. Таблица, к которой все (ну или основная масса) запросы идут только по конкретному id. И вместо одного описка по кластерному индексу, вы предлагаете к поиску по обычному индексу добавить lookup из кластерного.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072636
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

Читайте внимательно то, что критикуете :)
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072637
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гладченко
msLex,

Читайте внимательно то, что критикуете :)




Я прекрасно прочитал ваш пост полностью, и никакой "не кванторности" в нем нет.
Все предельно просто и ясно. "Сделал кластерный PK по ID - безграмотный дизайнер таблиц!"
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072638
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,
Вы же взрослый и опытный человек, а никак читать не научитесь?! Почему Вы забыли о контексте обсуждений?
Вы ещё мне вмените таблицы, используемые для связей...
Если для нормальной работы рядом с кластерным индексом приходится делать такой же не кластерный - речь об этом.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072641
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гладченко
msLex,
Вы же взрослый и опытный человек, а никак читать не научитесь?! Почему Вы забыли о контексте обсуждений?
Вы ещё мне вмените таблицы, используемые для связей...
Если для нормальной работы рядом с кластерным индексом приходится делать такой же не кластерный - речь об этом.


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


Обычно, в случаях когда хотят подчеркнуть частые ошибки или некие паттерны проектирования, используют слова вида "В большинстве случаев", "Очень редко" и т.п.

В вашем же сообщении, утверждение совершенно безапелляционны.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072642
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

Привет от Целко :)
Да, безапеляционны, потому что исключения очень редки, а айдиотизм я встречаю повсюду и массово.
Десеть раз подумайте, прежде чем сделать ID кластеризованным первичным ключом.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072645
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гладченко
Привет от Целко :)

Спасибо. И ему тоже.

Александр Гладченко
Десеть раз подумайте, прежде чем сделать ID кластеризованным первичным ключём.





Десять раз подумать нужно перед выбором любого из полей в качестве PK, ключа кластерного индекса и много еще чего. Но это не делает "айдиотом" того, кто сделал этот выбор обдуманно.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072651
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

Вот с этим я не буду спорить, т.к. это и хотел сказать, только в "шутливой" форме :)
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072653
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гладченко
Это, увы, очень часто встречающаяся ситуация :(
Кластерный индекс по IDENTITY да ещё и первичный ключ - это вершина безграмотности дизайнера таблицы :) Вспомните труды одного славного парня, который таких горемык называл айдиотами
Кластерный индекс хорош при просмотрах полных и не полных, и когда нужно выдать много колонок.
Некластерный индек как раз для поиска хорошо работает, и первичный ключ по некластерному тут будет оптимизатору завсегда удобней.


Александр, вы имеете в виду, что кластерный индекс должен включать все поля таблицы или весьма значительную их часть?


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

И делали не самые глупые люди. Которые и на этом форуме присутствовали несколько ранее.

Как же так?
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072677
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуации могут быть разными и нельзя сказать, что в подавляющем количестве случаев выбор нумератора в качестве кластерного ключа - наихудший вариант. Соглашусь с msLex, в том, что необходима оценка практичности такого решения с учетом особенностей индексов в кластеризованных таблицах.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072744
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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?
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072745
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Сходу, кластерный индекс, отличный от синтетического PK - хорош только в неизменяемых справочниках, ну, еще иногда в хранилищах.
А в OLTP доступ обычно к конкретной записи, по конкретному, совершенно абстрактному и не привязанному к смыслу хранимых данных ключу.
Какой вариант подходит лучше чем int identity?


Bigint очевидно! :)
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072749
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Сходу, кластерный индекс, отличный от синтетического PK - хорош только в неизменяемых справочниках, ну, еще иногда в хранилищах.

А вот это точно не так.
Любые запросы по некластерному индексу, будут требовать либо включения всех требуемых полей в include секцию, что приводит и к увеличению объема данных, и к большему количеству операций при модификации данных, либо к появлению key lookup-ов.


Причем, если поиск сам поиск группы значений в некластерном будет выполнятся за один "спуск по дереву" и последующий range scan, то каждый key lookup, это отдельный поиск в кластерном индексе, и он очень сильно замедляет скорость выполнения запроса.



Классический (для меня) пример плохого кластерного по id я первый раз увидел лет 15 назад.
Обычная таблица документов (счета и т.п.) с кластерным индексом по ID и основные запросы вида select .. from .. where create_date beetwen ....
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072784
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но тогда как совместить?

это:

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

с этим:

msLex
Любые запросы по некластерному индексу, будут требовать либо включения всех требуемых полей в include секцию, что приводит и к увеличению объема данных, и к большему количеству операций при модификации данных, либо к появлению key lookup-ов.


Видимо уменьшением кластерного индекса до ровно одного поля с ID, покрывающими индексами и наконец уменьшением ширины таблицы. С вынесением всех необязательных, справочных, "плавающих" данных в присоединённые таблицы, строго специализированные (в них стараться иметь минимум полей и кластерный индекс по всем полям).



msLex
Классический (для меня) пример плохого кластерного по id я первый раз увидел лет 15 назад.
Обычная таблица документов (счета и т.п.) с кластерным индексом по ID и основные запросы вида select .. from .. where create_date beetwen ....


А как надо?
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072788
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь
msLex
Классический (для меня) пример плохого кластерного по id я первый раз увидел лет 15 назад.
Обычная таблица документов (счета и т.п.) с кластерным индексом по ID и основные запросы вида select .. from .. where create_date beetwen ....


А как надо?


для этого конкретного запроса, идеальным будет кластерный индекс по create_date
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072789
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
Кесарь
пропущено...


А как надо?


для этого конкретного запроса, идеальным будет кластерный индекс по create_date


Ну знаете, так я и сам ответить могу. Очевидно в жизни к таблице обращаются не с одним видом запроса.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072800
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь
msLex
пропущено...


для этого конкретного запроса, идеальным будет кластерный индекс по create_date


Ну знаете, так я и сам ответить могу. Очевидно в жизни к таблице обращаются не с одним видом запроса.



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


В том конкретном случае, на любой запрос по ключу документа был предварительный запрос с получением списка документов за диапазон (сегодня по умолчанию) дат.
И кластерный индекс по create_date был бы оптимальным решением.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072801
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
В том конкретном случае, на любой запрос по ключу документа был предварительный запрос с получением списка документов за диапазон (сегодня по умолчанию) дат.
И кластерный индекс по create_date был бы оптимальным решением.


Кудряво! Ну в таком случае оно конечно.
...
Рейтинг: 0 / 0
Некластерный индекс по полям кластерного. В чем фишка?
    #40072871
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь
msLex
В том конкретном случае, на любой запрос по ключу документа был предварительный запрос с получением списка документов за диапазон (сегодня по умолчанию) дат.
И кластерный индекс по create_date был бы оптимальным решением.


Кудряво! Ну в таком случае оно конечно.

а если подумать то оказывается что даты как раз хороший кандидат на партицирование, а не кластеризацию
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Некластерный индекс по полям кластерного. В чем фишка?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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