Re[4]: Добавлять ли индекс?
От: MozgC США http://nightcoder.livejournal.com
Дата: 09.02.10 20:06
Оценка:
Здравствуйте, LelicDsp, Вы писали:

LD>тогда индекс вполне можно добавить. у Вас получается 120 строк на одну страницу innodb, а селективность около 1/1000. Те даже в худшем случае равномерного случайного распределения будет в 10 раз быстрее фулскана.


Вообще вопрос был не в этом. Сразу понятно было, что индекс раз в 10 минимум ускорит данную выборку. У меня чисто было опасение, что через несколько лет может накопиться куча индексов и это приведет к заметному понижению скорости изменения данных в таблице. Но решил все-таки не заморачиваться, добавить индекс, а через 5 лет если вдруг будут проблемы с производительностью — тогда их и решать — всегда можно будет дропнуть индексы и сделать один из вариантов, которые я привел в исходном посте. Так что пока добавил один один индекс + в один имеющийся индекс добавил 1 колонку + переписал пару DAL-методов, ну и теперь все ок — вся статистика в самом худшем случае собирается в пределах 1-2 секунд, а после кеширования, либо в среднем случае — до 200 мс.
Re[4]: Добавлять ли индекс?
От: _d_m_  
Дата: 11.02.10 01:32
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>А другого средства оптимизации выборок, кроме индексов, в СУБД

MZ>не существует.

Существует. Отчечать не обязательно — это я чтоб минус не ставить.
Re[5]: Добавлять ли индекс?
От: MasterZiv СССР  
Дата: 11.02.10 06:40
Оценка: -1
wildwind wrote:
> MZ>Пофигу. Надо будет — подождут.
>
> Интересный подход.

Ты все на свете запросы не сможешь оптимизировать, ты в курсе ?
А речь идёт именно о них.

> MZ>А другого средства оптимизации выборок, кроме индексов, в СУБД

> MZ>не существует.
>
> Еще интереснее.

Да вот, знай !
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Добавлять ли индекс?
От: MasterZiv СССР  
Дата: 11.02.10 06:41
Оценка:
_d_m_ wrote:

> Существует. Отчечать не обязательно — это я чтоб минус не ставить.


Мне глубоко пофигу как на плюсы, так и на минусы.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Добавлять ли индекс?
От: MasterZiv СССР  
Дата: 11.02.10 06:43
Оценка:
Romanzek wrote:

> Так мускул — это ж РСУБД. Не думаю, что она разительно отличается от

> оракула или других РСУБД. Ничего нового там не придумано — в этом я
> уверен на 100%.

Правильная, кстати, мысль.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Добавлять ли индекс?
От: MasterZiv СССР  
Дата: 11.02.10 06:44
Оценка:
MozgC wrote:

> LD>Если много, то как они кластеризованы относительно первичного ключа?

> случайно или есть корреляция?
> В MySql нет кластерных индексов.

Знай же, что в MySQL, а именно в InnoDb все индексы наоборот кластерные.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Добавлять ли индекс?
От: MasterZiv СССР  
Дата: 11.02.10 06:49
Оценка: 1 (1)
MozgC wrote:

> Вообще вопрос был не в этом. Сразу понятно было, что индекс раз в 10

> минимум ускорит данную выборку. У меня чисто было опасение, что через
> несколько лет может накопиться куча индексов и это приведет к заметному
> понижению скорости изменения данных в таблице. Но решил все-таки не
> заморачиваться, добавить индекс, а через 5 лет если вдруг будут проблемы
> с производительностью — тогда их и решать — всегда можно будет дропнуть
> индексы и сделать один из вариантов, которые я привел в исходном посте.

В этом и заключается печальная правда об оптимизации производительности
реляционных СУБД -- вечный балланс между производительностью выборок
и модификаций. Но думаю конкретно тебе (да и на самом деле большинству
приложений) до точки, где начинает играть производительность модификаций
ещё очень далеко. Да и выборок как правило больше в несколько раз,
так что их производительность важнее в целом для приложения.

> Так что пока добавил один один индекс + в один имеющийся индекс добавил

> 1 колонку + переписал пару DAL-методов, ну и теперь все ок — вся
> статистика в самом худшем случае собирается в пределах 1-2 секунд, а
> после кеширования, либо в среднем случае — до 200 мс.

Вот как раз для сбора статистики производительность нигде не важна.
О чём я и говорил -- можно подождать.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Добавлять ли индекс?
От: Plague Россия  
Дата: 11.02.10 07:55
Оценка:
Здравствуйте, Romanzek, Вы писали:

R>Так мускул — это ж РСУБД. Не думаю, что она разительно отличается от оракула или других РСУБД. Ничего нового там не придумано — в этом я уверен на 100%.

К сожалению, там местами и «старого ничего не придумано».
Re[4]: Добавлять ли индекс?
От: LelicDsp Россия  
Дата: 11.02.10 08:55
Оценка:
MZ>Знай же, что в MySQL, а именно в InnoDb все индексы наоборот кластерные.

Все индексы не могут быть кластерные Кластерный индекс может быть один на таблицу. В innodb — это всегда первичный ключ.
Re[5]: Добавлять ли индекс?
От: LelicDsp Россия  
Дата: 11.02.10 09:11
Оценка: 1 (1)
LD>>тогда индекс вполне можно добавить. у Вас получается 120 строк на одну страницу innodb, а селективность около 1/1000. Те даже в худшем случае равномерного случайного распределения будет в 10 раз быстрее фулскана.

MC>Вообще вопрос был не в этом. Сразу понятно было, что индекс раз в 10 минимум ускорит данную выборку. У меня чисто было опасение, что через несколько лет может накопиться куча индексов и это приведет к заметному понижению скорости изменения данных в таблице. Но решил все-таки не заморачиваться, добавить индекс, а через 5 лет если вдруг будут проблемы с производительностью — тогда их и решать — всегда можно будет дропнуть индексы и сделать один из вариантов, которые я привел в исходном посте. Так что пока добавил один один индекс + в один имеющийся индекс добавил 1 колонку + переписал пару DAL-методов, ну и теперь все ок — вся статистика в самом худшем случае собирается в пределах 1-2 секунд, а после кеширования, либо в среднем случае — до 200 мс.


Ну всегда полезно проверить все варианты

Почему может падать скорость ставки со временем?
1) увеличивается глубина btree. У Вас БД небольшая относительно, считать точно считать влом, но а) вряд ли увеличение глубины дерева на 1 уровень произойдет больше одного раза, б) все равно индекс достаточно компактный
2) увеличение вероятности необходимости перебалансировки при вставке / апдейте. тут много зависит от того как расределены значения индексируемого столбца, но по-идее этот показатель не должен сильно меняться.
3) что-то я забыл еще?

Можно еще сделать по-другому, я собственно так в боевой системе и делаю сейчас, особенно в связи с тем что там есть определенные косяки в дизайне. Настраивается мастер-слэйв репликация, на мастере индексов по-минимуму, только необходимые для OLTP. Соответственно весь OLTP-style workload идет через мастер, а вся аналитика, отчеты — со слэйва, и там уже индексы сделать нужные для отчетов, и вообще можно много индексов, в т.ч. covering (fat) индексы.
Re[6]: Добавлять ли индекс?
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 11.02.10 09:16
Оценка:
Здравствуйте, LelicDsp, Вы писали:

LD>Можно еще сделать по-другому, я собственно так в боевой системе и делаю сейчас, особенно в связи с тем что там есть определенные косяки в дизайне. Настраивается мастер-слэйв репликация, на мастере индексов по-минимуму, только необходимые для OLTP. Соответственно весь OLTP-style workload идет через мастер, а вся аналитика, отчеты — со слэйва, и там уже индексы сделать нужные для отчетов, и вообще можно много индексов, в т.ч. covering (fat) индексы.



Согласен, если надо запускать на базе тяжелые отчеты — то лучше делать это на копии. У MSSQL это замечательно делается лог шиппингом, когда дочерняя база стоит в read only
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
Re[4]: Добавлять ли индекс?
От: MozgC США http://nightcoder.livejournal.com
Дата: 11.02.10 12:46
Оценка: +1
Здравствуйте, MasterZiv, Вы писали:

MZ>Знай же, что в MySQL, а именно в InnoDb все индексы наоборот кластерные.


Это неверное заявление. Ну, право, будьте все-таки внимательнее, сдержаннее и точнее в своих утверждениях. Во-первых, не все, т.к. кластерный индекс у таблицы может быть только один. Во-вторых, если я добавлю в таблицу только один, неуникальный, индекс, или один уникальный индекс с колонкой(ами) которая может принимать NULL-значения, то такой индекс не будет кластерным.
Re[5]: Добавлять ли индекс?
От: MozgC США http://nightcoder.livejournal.com
Дата: 11.02.10 12:48
Оценка:
Здравствуйте, LelicDsp, Вы писали:

LD>Кластерный индекс может быть один на таблицу. В innodb — это всегда первичный ключ.

Тоже неточно
Re[6]: Добавлять ли индекс?
От: MozgC США http://nightcoder.livejournal.com
Дата: 11.02.10 12:55
Оценка:
Здравствуйте, LelicDsp, Вы писали:

LD>Можно еще сделать по-другому, я собственно так в боевой системе и делаю сейчас, особенно в связи с тем что там есть определенные косяки в дизайне. Настраивается мастер-слэйв репликация, на мастере индексов по-минимуму, только необходимые для OLTP. Соответственно весь OLTP-style workload идет через мастер, а вся аналитика, отчеты — со слэйва, и там уже индексы сделать нужные для отчетов, и вообще можно много индексов, в т.ч. covering (fat) индексы.


Можно и так было бы сделать, но:
1) У меня веб-сайт на shared hosting'е.
2) Мне кажется что так заморачиваться нужно только при реально больших нагрузках, когда уже начинаются проблемы. Например репликация требует дополнительного надсмотра и администрирования (см. пункт 3 ниже).
3) Если вы про MySql, то на моем опыте там не очень хорошо дела с репликацией. STATEMENT based и MIXED режимы не подходят в реальной системе (регулярно время от времени всплывают ошибки репликации, в следствие чего происходит либо рассинхронизация, либо остановка вообще). Насчет ROW based репликации точно не помню, по-моему и там были проблемы. Вчера как раз опять на главном сервере настроил ROW based репликацию, посмотрим как будет работать.
Re[6]: Добавлять ли индекс?
От: LelicDsp Россия  
Дата: 11.02.10 14:06
Оценка:
LD>>Кластерный индекс может быть один на таблицу. В innodb — это всегда первичный ключ.
MC>Тоже неточно
Вы про то, первичный ключ может быть неявным ?
Re[7]: Добавлять ли индекс?
От: LelicDsp Россия  
Дата: 11.02.10 14:11
Оценка:
MC>3) Если вы про MySql, то на моем опыте там не очень хорошо дела с репликацией. STATEMENT based и MIXED режимы не подходят в реальной системе (регулярно время от времени всплывают ошибки репликации, в следствие чего происходит либо рассинхронизация, либо остановка вообще). Насчет ROW based репликации точно не помню, по-моему и там были проблемы. Вчера как раз опять на главном сервере настроил ROW based репликацию, посмотрим как будет работать.

Пока Бог миловал тьфу-тьфу-тьфу, не считая ошибок при недостаточно большом максимальном размере пакета. Но мы, кстати, используем только statement репликацию, потому что у нас на слэйве еще и триггеры висят, которые еще дополнительные таблицы для аудита и статистики ведут.
Re[8]: Добавлять ли индекс?
От: MozgC США http://nightcoder.livejournal.com
Дата: 11.02.10 15:06
Оценка:
Здравствуйте, LelicDsp, Вы писали:

LD>Пока Бог миловал тьфу-тьфу-тьфу, не считая ошибок при недостаточно большом максимальном размере пакета. Но мы, кстати, используем только statement репликацию, потому что у нас на слэйве еще и триггеры висят, которые еще дополнительные таблицы для аудита и статистики ведут.


А ХП используете? Насколько я помню большая часть проблем была от них.
Re[6]: Добавлять ли индекс?
От: _d_m_  
Дата: 11.02.10 17:24
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Мне глубоко пофигу как на плюсы, так и на минусы.


Мне в принципе тоже, просто некоторых задевает
Re[7]: Добавлять ли индекс?
От: _d_m_  
Дата: 11.02.10 17:27
Оценка: +1
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, MasterZiv, Вы писали:


MZ>>Мне глубоко пофигу как на плюсы, так и на минусы.


___>Мне в принципе тоже, просто некоторых задевает


Тех же минусов могут понаставить кто угодно — особенно это любят тупенькие ламерки. Плюсы там оценки людям ставлю — может им приятно. Минусы ставлю очень очень редко.
Re[9]: Добавлять ли индекс?
От: LelicDsp Россия  
Дата: 11.02.10 17:59
Оценка:
MC>А ХП используете? Насколько я помню большая часть проблем была от них.

а, нет, не используем.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.