Size: a a a

DBA - русскоговорящее сообщество

2021 March 11

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Ваня
Всем привет, народ
Может кто-то обьяснить в какой ситуации нужно строить кластерные индексы, а в какой некластерные?
Их отличия я знаю, но что-то непонятно пока для меня когда какие использовать
ТУПО: для PK - кластерный, для всего остального — нет.
СОВСЕМ ТУПО: не знаешь, какой индекс делать кластерным — делай все некластерными.
ПО-УМНОМУ: если надо делать большие range scan -ы по индексу — делай его кластерным. Но повезёт только один раз...
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Ваня
То есть в такой ситуации кластерный индекс имеет выигрыш перед некластерным, верно?
Кластерный перед некластерным вообще имеет очень маленький выигрышь, хотя и имеет конечно,
но у него есть один существенный недостаток (у кластерного) - он в таблице может быть ТОЛЬКО ОДИН.
источник

В

Ваня in DBA - русскоговорящее сообщество
Ilia Zviagin
ТУПО: для PK - кластерный, для всего остального — нет.
СОВСЕМ ТУПО: не знаешь, какой индекс делать кластерным — делай все некластерными.
ПО-УМНОМУ: если надо делать большие range scan -ы по индексу — делай его кластерным. Но повезёт только один раз...
Хорошо, а если представим ситуацию такую

Вот есть у нас мессенджер, есть какая-то таблица сообщений с 10 миллионами записей
Мы зафигачили кластер-индекс по диалогу например

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

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Yaroslav Schekin
А СУБД-то какая, на всякий случай (вдруг не MS SQL)?
А сейчас уже почти всё равно... очень расхожая схема сейчас у многих СУБД — кластерный PK
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Ваня
Хорошо, а если представим ситуацию такую

Вот есть у нас мессенджер, есть какая-то таблица сообщений с 10 миллионами записей
Мы зафигачили кластер-индекс по диалогу например

К примеру у нас есть диалог с миллионом записей - то есть какая-то выборка по нему будет все равно не очень быстрая
И мне например надо там еще выбирать по каким-то свойствам сообщения с этого диалога (по каким сложно придумать, но пусть этих свойств еще будет 3)
Стоит ли строить некластерный индекс по этим полям в такой ситуации?
Стоит ли строить (некластерный) индекс по этим полям в такой ситуации? — это вообще другой, совершенно отдельный вопрос.
НИКАК не связанный с предыдущим вопросом.
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Ваня
Хорошо, а если представим ситуацию такую

Вот есть у нас мессенджер, есть какая-то таблица сообщений с 10 миллионами записей
Мы зафигачили кластер-индекс по диалогу например

К примеру у нас есть диалог с миллионом записей - то есть какая-то выборка по нему будет все равно не очень быстрая
И мне например надо там еще выбирать по каким-то свойствам сообщения с этого диалога (по каким сложно придумать, но пусть этих свойств еще будет 3)
Стоит ли строить некластерный индекс по этим полям в такой ситуации?
Судя по всему, тебе подойдёт, на твоём уровне понимания, пункт "ТУПО" , тем более, что SQLServer
источник

LE

Lex E in DBA - русскоговорящее сообщество
Ваня
Хорошо, а если представим ситуацию такую

Вот есть у нас мессенджер, есть какая-то таблица сообщений с 10 миллионами записей
Мы зафигачили кластер-индекс по диалогу например

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

Идексы текста работают по другому

Наверняка этот индекс будет отдельным столбцом в таблице
Или типа того

Вроде
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
Ilia Zviagin
ТУПО: для PK - кластерный, для всего остального — нет.
СОВСЕМ ТУПО: не знаешь, какой индекс делать кластерным — делай все некластерными.
ПО-УМНОМУ: если надо делать большие range scan -ы по индексу — делай его кластерным. Но повезёт только один раз...
И вот ровно с таким подходом (на уровне коленного рефлекса) я и видел ситуации (суть которых описана по ссылке), когда "умница"-консультант или DBA, глядя на heap-таблицу с десятком индексов, говорил "ну что же вы, это же плохая практика! Срочно переделать!"... и  после внедрения "улучшения" производительность падала в разы. ;)

Так что лучше думать, если ситуация такая, когда это может иметь значение, вот в чём был мой посыл.
источник

В

Ваня in DBA - русскоговорящее сообщество
Lex E
Там в диалогах текст

Идексы текста работают по другому

Наверняка этот индекс будет отдельным столбцом в таблице
Или типа того

Вроде
я имею ввиду не по тексту выборку делаем, а по каким-то абстрактным свойствам
ну, например, какое сообщение не прочитано и так далее, это вообще не важно

сложно придумать просто свойства сообщений)
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Yaroslav Schekin
И вот ровно с таким подходом (на уровне коленного рефлекса) я и видел ситуации (суть которых описана по ссылке), когда "умница"-консультант или DBA, глядя на heap-таблицу с десятком индексов, говорил "ну что же вы, это же плохая практика! Срочно переделать!"... и  после внедрения "улучшения" производительность падала в разы. ;)

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

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Yaroslav Schekin
И вот ровно с таким подходом (на уровне коленного рефлекса) я и видел ситуации (суть которых описана по ссылке), когда "умница"-консультант или DBA, глядя на heap-таблицу с десятком индексов, говорил "ну что же вы, это же плохая практика! Срочно переделать!"... и  после внедрения "улучшения" производительность падала в разы. ;)

Так что лучше думать, если ситуация такая, когда это может иметь значение, вот в чём был мой посыл.
Ярослав, там же был и пункт "СОВСЕМ ТУПО"
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
Ilia Zviagin
Так это был наверное консультант по SQLServer...
Да.
А где ещё "основное" название index-organized table сейчас "кластерный индекс", кстати?
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Ваня
я имею ввиду не по тексту выборку делаем, а по каким-то абстрактным свойствам
ну, например, какое сообщение не прочитано и так далее, это вообще не важно

сложно придумать просто свойства сообщений)
Сложно говорить о индексах абстрактно...
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Yaroslav Schekin
Да.
А где ещё "основное" название index-organized table сейчас "кластерный индекс", кстати?
Везде, кроме оракла и PG... AFAIK
источник

В

Ваня in DBA - русскоговорящее сообщество
Ilia Zviagin
Сложно говорить о индексах абстрактно...
Хорошо, ок
Пусть будет делаем выборку в этом диалоге (это будет груповой чат) сообщений, которые были прочитаны и которые написали женщины допустим

Так лучше ?
источник

LE

Lex E in DBA - русскоговорящее сообщество
Yaroslav Schekin
И вот ровно с таким подходом (на уровне коленного рефлекса) я и видел ситуации (суть которых описана по ссылке), когда "умница"-консультант или DBA, глядя на heap-таблицу с десятком индексов, говорил "ну что же вы, это же плохая практика! Срочно переделать!"... и  после внедрения "улучшения" производительность падала в разы. ;)

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

Смотрю где индексы настроены, а где нужно настроить

И да, это ведет к большему количеству индексов чем вроде как нужно

Но я ж могу добавить всегда шард на запись

А если все совсем плохо станет, то позвать консультанта :)
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Ваня
Хорошо, ок
Пусть будет делаем выборку в этом диалоге (это будет груповой чат) сообщений, которые были прочитаны и которые написали женщины допустим

Так лучше ?
Нет, хуже. Индекс не нужен для этих условий.
источник

В

Ваня in DBA - русскоговорящее сообщество
Ilia Zviagin
Нет, хуже. Индекс не нужен для этих условий.
Я понимаю что не нужен так как это булевые значения
источник

В

Ваня in DBA - русскоговорящее сообщество
Я утрировано
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
Ilia Zviagin
Везде, кроме оракла и PG... AFAIK
Да, похоже на то, спасибо!
Всё-таки не очень удачное название (по самому названию непонятно, что это такое... а некоторые и вовсе понимают иначе), IMHO.
источник