Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Про выбор СУБД подходящих индексов БД 
V
    Опции темы
Akina
Дата 4.6.2013, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  4.6.2013,  16:18 Найти цитируемый пост)
мой мир вообще перевернулся. Я всегда считал что JOIN создает временную таблицу

Посмотрите http://dev.mysql.com/doc/refman/5.5/en/ind...timization.html


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 4.6.2013, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(maxipub @  4.6.2013,  16:18 Найти цитируемый пост)
Но почему тогда Akina пишет:

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

Добавлено @ 16:10
Цитата(Zloxa @  4.6.2013,  17:06 Найти цитируемый пост)
ибо индекс по паре (id,status) может быть использван для тех же целей, для каких может быть использован индекс по id

хотя....

Akina, мася умеет такую хрень:
Код

create index mytable$idx on mytable(id,status);
alter table mytable add constraint mytable$pk primary key (id) using index mytable$idx;

?

Добавлено @ 16:15
Цитата(Akina @  4.6.2013,  16:44 Найти цитируемый пост)
index-merge-optimization.html

Это же совсем не о том... здесь нет индекс мержа.  smile 
Здесь реньжскан индекса по balanse>100 + нестед луп, с уник/реньжскану  по индексу t2.id

Это сообщение отредактировал(а) Zloxa - 5.6.2013, 10:33


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 5.6.2013, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Парни, очень признателен за помощь! За эти сутки узнал много нового, по-другому начал смотреть на это дело. Утро вечера мудренее, тот мутный запрос уже удалось ускорить с 25 до <0.05сек smile ну еще раза в два ускорить, и я буду совсем доволен. smile 

Такой еще вопрос по теме: а можно при JOIN как-то явно указать лидирующую таблицу? Просто я уверен что сейчас она не оптимальная, хотя бы попробовать что будет. Запихнул все индексы нового лидера в IGNORE, выполняет полное сканирование, но все равно выбирает эту таблицу! Можно как-то явно указать приоритетную?

И если у кого есть что интересного по теме, желательно на русском, буду рад ссылочкам. И инглыш тоже. МАН хорош, но местами суховат, описание, пример-другой, а особенностей применения не особо.
PM MAIL   Вверх
maxipub
Дата 5.6.2013, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(maxipub @  5.6.2013,  10:28 Найти цитируемый пост)
а можно при JOIN как-то явно указать лидирующую таблицу?

узнал про STRAIGHT_JOIN smile
PM MAIL   Вверх
Akina
Дата 5.6.2013, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Zloxa @  4.6.2013,  17:06 Найти цитируемый пост)
мася умеет такую хрень:

Не понял, что имеется в виду... если про то, что раньше первичным был один индекс, а теперь он стал обычный, а первичным стал другой - запросто.

Цитата(Zloxa @  4.6.2013,  17:06 Найти цитируемый пост)
Здесь реньжскан индекса по balanse>100 + нестед луп, с уник/реньжскану  по индексу t2.id

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




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 5.6.2013, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @  5.6.2013,  13:30 Найти цитируемый пост)
Не понял, что имеется в виду... если про то, что раньше первичным был один индекс, а теперь он стал обычный, а первичным стал другой - запросто.

использовать для контроля ограничения первичного/уникального ключа составной, не уникальный индекс, содержащий в себе перечисление большего количество полей нежели нужны для контроля ограничения.

Т.е. не уникальный индекс по (id,status), а ограничение ПК по (id) использует этот индекс

Добавлено через 4 минуты и 21 секунду
Цитата(Akina @  5.6.2013,  13:30 Найти цитируемый пост)
 может же быть, что он использует два составных индекса и мерже джойн по ним? ну так, чисто в теории... или хэш джойн... 

Может... но и в этих сценариях нет индексмержинга ))

Добавлено через 6 минут и 52 секунды
Цитата(Akina @  5.6.2013,  13:30 Найти цитируемый пост)
мерже джойн 

В оракле, кстате, очень не популярный метод жойна.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 5.6.2013, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Zloxa @  5.6.2013,  13:35 Найти цитируемый пост)
использовать для контроля ограничения первичного/уникального ключа составной, не уникальный индекс, содержащий в себе перечисление большего количество полей нежели нужны для контроля ограничения.

Составной первичный индекс? Да пжалста. Причём по текстовым полям можно не всё поле в индекс, а только необходимый префикс. 

Цитата(Zloxa @  5.6.2013,  13:35 Найти цитируемый пост)
Т.е. не уникальный индекс по (id,status), а ограничение ПК по (id) использует этот индекс

ааа... не, вот чего нет того нет.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 5.6.2013, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @  5.6.2013,  13:46 Найти цитируемый пост)
чего нет того нет

оракля в этом отношении вобще умняшка... может даже сам определить, что для поддержания ограничения нового индекса не надо
Код

SQL> create table idx_test(id number,val number);
Table created
SQL> create index idx_test$idx on idx_test (id,val);
Index created
SQL> alter table idx_test add constraint idx_test$pk primary key (id);
Table altered
SQL> select index_name,uniqueness from user_indexes where table_name = 'IDX_TEST';
INDEX_NAME                     UNIQUENESS
------------------------------ ----------
IDX_TEST$IDX                   NONUNIQUE
SQL> select constraint_name,index_name from user_constraints where table_name = 'IDX_TEST';
CONSTRAINT_NAME                INDEX_NAME
------------------------------ ------------------------------
IDX_TEST$PK                    IDX_TEST$IDX



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 5.6.2013, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Zloxa @  5.6.2013,  14:29 Найти цитируемый пост)
оракля в этом отношении вобще умняшка... может даже сам определить, что для поддержания ограничения нового индекса не надо

Угу... вот только у него так получается, что часть индекса - первична и уникальна, а сам индекс - NONUNIQUE. Не сообразил, аднака... косячок-с...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 5.6.2013, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @  5.6.2013,  15:04 Найти цитируемый пост)
 косячок-с..

да нет косячка, нормуль все.

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

Это сообщение отредактировал(а) Zloxa - 5.6.2013, 14:36


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 5.6.2013, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



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

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 5.6.2013, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @  5.6.2013,  15:54 Найти цитируемый пост)
, что данный индекс (ну или комбинация полей) по факту является уникальной

В том то все и дело. Повторюсь. Уникальный и не уникальный индекс имеют одинаковую структуру. Если бы уникальный имел более оптимальную какуюнить струтуру хранения, логику построения, строить его по заведомо уникальным полям имело бы какой-то смысл.

Цитата(Akina @  5.6.2013,  15:54 Найти цитируемый пост)
Если, к примеру, не сильно опытный разработчик, ориентируясь только на сведения об уникальности

Сведения о требовании уникальности сохранены в структуре данных ограничением первичного ключа. Обеспечиватеся это требование уникальным ли индексом - не уникальным ли - какая разница?

Цитата(Akina @  5.6.2013,  15:54 Найти цитируемый пост)
любопытно

Код

SQL> insert into idx_test (id) values (1);
1 row inserted

SQL> insert into idx_test (id) values (1);
insert into idx_test (id) values (1)
ORA-00001: unique constraint (ZLOXA.IDX_TEST$PK) violated


с уникальным индексом - то же самое.
Код

SQL> create table idx_test2(id number);
Table created

SQL> create unique index idx_test2$unc on idx_test2(id);
Index created

SQL> insert into idx_test2 values (1);
1 row inserted

SQL> insert into idx_test2 values (1);
insert into idx_test2 values (1)
ORA-00001: unique constraint (ZLOXA.IDX_TEST2$UNC) violated

Надо заметить, что в ошибке сказано про ограничение, хотя ограничения, как такового не прописано и оно нигде не числится.
Код

SQL> select count(*) from user_constraints where constraint_name = 'IDX_TEST2$UNC';
  COUNT(*)
----------
         0


Однако, надо отдать должное, что исторически исключение ORA-00001 в PL/SQL имеет мнемонику dup_val_on_index

Это сообщение отредактировал(а) Zloxa - 5.6.2013, 15:17


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 5.6.2013, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



То есть он правильно именно в констрейнт носом тычет. Гуд. 

Цитата(Zloxa @  5.6.2013,  16:08 Найти цитируемый пост)
Повторюсь. Уникальный и не уникальный индекс имеют одинаковую структуру.

Да понятно это - условие реально отделено от индекса.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.