Як індекси впливають на ефективність запитів?


12

Очевидно, що збереження декількох різних індексів негативно впливає на продуктивність вставлення та видалення. Як щодо ефективності запитів: чи має сенс взагалі зберігати занадто багато індексів на столі? Чи покращиться ефективність запиту в будь-якому випадку із додаванням індексу (звичайно, для запитів, що взагалі використовують індекс) або можливо навіть, що ефективність запиту погіршиться із занадто великою кількістю індексів, оскільки для отримання необхідних запитів необхідні консультації з усіма індексами результат?

У випадку, якщо на столі є різні індекси: чи всі вони будуть вважатися чи лише найкращими з точки зору оптимізатора? Чи реалізує Oracle багатовимірні показники?


2
чому б ви не перевірили це і не звітували про свої результати? :)
Ніл МакГуган

Я буду робити завтра :)
paweloque

2
Індекси не обов’язково сповільнюють видалення, вони також можуть пришвидшити їх (подібно до того, як оновлення можуть скористатися індексом)
a_horse_with_no_name

@el шеф, який сенс у винаході колеса? так що так, ефективність виконання запиту викликає сумніви, хоча ми точно знаємо, що на вставки / видалення це вплине. Як щодо оновлень? чи будуть вони негативно впливати?
Санграм

Відповіді:


15

Для формування плану буде потрібно трохи більше часу, коли необхідно розглянути більше індексів, але я сумніваюся, що різниця була б помірно вагомою. У причинах падіння індексу НЕ список запитів продуктивності. З іншого боку, загалом не слід створювати індекси, якщо ви не знаєте, що вони будуть використані для підвищення ефективності запиту.

У Посібнику з концепцій Oracle ось критерії створення індексу.

Загалом, розгляньте можливість створення індексу на стовпчику в будь-якій з наступних ситуацій:

  • Індексовані стовпці часто запитуються і повертають невеликий відсоток від загальної кількості рядків у таблиці.

  • Референтне обмеження цілісності існує в індексованому стовпчику або стовпцях. Індекс - це спосіб уникнути повного блокування таблиці, який інакше знадобиться, якщо ви оновите первинний ключ батьківської таблиці, злитеся в батьківську таблицю або видалите з батьківської таблиці.

  • Унікальне обмеження ключів буде розміщено на таблиці, і ви хочете вручну вказати індекс та всі параметри індексу.

Всі індекси будуть розглянуті в тому сенсі, що всі індекси в таблицях запиту перевіряються, щоб визначити, чи можна їх використовувати. Ті, які можна було б додатково вивчити, щоб визначити корисність.


7

Поки ваші статистичні дані оновлюються, оптимізатор на основі витрат повинен приймати обґрунтовані рішення щодо того, які індекси використовувати. Якщо це не так, то саме час використовувати підказки . Він ніколи не звертається до індексу стовпця, який не потрібен для задоволення запиту.


0

Це я виявив у виборі стратегії індексу керівництва розробника додатків . На цій сторінці йдеться про "вибір стратегії індексу":

Обмежте кількість індексів для кожної таблиці

Чим більше індексів, тим більше накладних витрат відбувається в міру зміни таблиці. Коли рядки вставляються або видаляються, всі індекси в таблиці повинні бути оновлені. Коли стовпець оновлюється, усі індекси в стовпці повинні бути оновлені.

Ви повинні зважити ефективність ефективності індексів для запитів проти накладних витрат оновлень. Наприклад, якщо таблиця в основному лише для читання, ви можете використовувати більше індексів; але, якщо таблиця сильно оновлюється, ви можете використовувати менше індексів.


2
З питання: "Очевидно, що зберігання декількох різних індексів негативно впливає на продуктивність вставлення та видалення. Як щодо продуктивності запитів"
Джек каже, що спробуйте topanswers.xyz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.