Огляд Що таке єдиний індекс і що таке композитний індекс? Коли створювати новий композитний індекс і на що слід звертати увагу у композитному індексі? Ця стаття є переважно підсумком деяких обговорень в Інтернеті.
Один. Концепція
Один індекс — це ситуація, коли індекс розміщений в одному стовпці, тобто твердження про створення нового індексу реалізоване лише в одному стовпці.
Користувачі можуть створювати індекси на кількох стовпцях, які називаються композитними індексами (комбіновані індекси). Композитні індекси створюються точно так само, як і окремі індекси. Але композитні індекси потребують менше накладних витрат під час операцій з базою даних і можуть замінити кілька окремих індексів. Коли кількість рядків у таблиці значно перевищує кількість ключів, цей метод може суттєво прискорити швидкість запитів у таблиці.
Існують два поняття одночасно: вузькі індекси та широкі індекси, вузькі індекси стосуються індекс з 1-2 стовпцями і зазвичай стосуються одного індексу, якщо не вказано інше. Широкий індекс — це індекс із більш ніж 2 стовпцями.
Важливим принципом проєктування індексу є використання вузьких індексів замість широких, оскільки вузькі індекси зазвичай ефективніші за комбіновані індекси. Більш вузькі індекси дають оптимізатору більше вибору, що часто допомагає покращити продуктивність.
Два. Використання
Створіть індекс Створити індекс IDX1 у таблиці 1 (COL1,COL2,COL3) Питати виберіть * з таблиці 1, де col1= A, col2= B, а col3 = C
У цей момент оптимізатор запитів не сканує таблицю, а безпосередньо забирає дані з індексу, оскільки в індексі є ці дані, які називаються overlay-запитом, і швидкість запиту дуже висока.
Три. Примітки:
1. Коли використовувати складений індекс У умові where поле індексується, і якщо використовується кілька полів, використовується складений індекс. Зазвичай не будуйте жодних індексів у полі select (якщо хочете запитати select col1, col2, col3 з mytable, вам не потрібен наведений вище індекс). Індексація на основі умов де є надзвичайно важливим принципом. Будьте обережні, щоб не використовувати надто багато індексів, інакше це суттєво вплине на ефективність оновлення таблиць, адже при роботі з таблицями доводиться витрачати багато часу на створення індексів.
2. Для складних індексів при використанні запиту найкраще дотримуватися порядку пошуку індексів, який є найефективнішим. Наприклад: IDX1:створити індекс idx1 у таблиці 1(col2,col3,col5) вибрати * з таблиці 1, де col2=A, col3=B і col5=D
Якщо це «вибрати * з таблиці 1, де col3=B, col2=A і col5=D» Або «вибрати * зі таблиці 1, де col3=B» не використовує індекс, або ефект не помітний
3. Чи замінить композитний індекс один індекс? Багато хто вважає, що додавання будь-якого поля до кластеризованого індексу може покращити швидкість запитів, але деякі плутаються: якщо складні кластеризовані індексні поля запитувати окремо, чи сповільниться швидкість запиту? У цьому питанні давайте розглянемо наступну швидкість запиту (набір результатів — 250 000 даних), :( стовпець дати fariqi займає перше місце у стартовому стовпці композитного індексу агрегації, а ім'я користувача neibuyonghu — друге місце)
IDX1:create index idx1 on Tgongwen(fariqi,neibuyonghu)
(1) вибрати гід, фаріці, нейбуйонху, титул з Тгонгвена Де Фарікі>'2004-5-5'
Швидкість запиту: 2513 мс
(2) вибрати гід, фаріці, нейбуйонху, титул з Тгонгвен де fariqi>'2004-5-5' та neibuyonghu='офіс'
Швидкість запиту: 2516 мс
(3) вибрати гід, фаріці, нейбуйонху, титули з Тгонгвена де neibuyonghu='офіс'
Швидкість запиту: 60280 мілісекунд
З наведених вище експериментів видно, що якщо як умову запиту використовується лише початковий стовпець кластеризованого індексу, швидкість запиту всіх стовпців із композитним кластеризованим індексом майже однакова, навіть трохи швидша, ніж використання всіх композитних індексних стовпців (коли кількість наборів результатів запиту однакова). Якщо як умови запиту використовуються лише нестартові стовпці складного агрегованого індексу, цей індекс нічого не зробить. Звісно, швидкість запитів операторів 1 і 2 однакова, оскільки кількість записів у запиті однакова; якщо використовувати всі стовпці композитного індексу, а результатів запиту мало, це утворює «перевизначення індексу», що дозволяє оптимізувати продуктивність. Також пам'ятайте, що незалежно від того, чи часто ви використовуєте інші стовпці в агрегованому індексі, провідний стовпець має бути тим, що використовується найчастіше.
[Джерело: Схема оптимізації запитів і алгоритму пагінації http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]
4. Чи потрібно одночасно створювати один індекс і складений індекс на одному стовпці? Експеримент: Sysbase 5.0 таблиця таблиця 1 поля: col1, col2, col3
Кроки тестування: (1) Створити індекс idx1 на col1 Виконати select * з таблиці 1, де col1=A використовує idx1 Виконати select * з таблиці 1, де col1=A і col2=B також використовують idx1
(2) Видалити індекс idx1, а потім створити idx2 на композитному індексі (col1,col2) Обидва запити використовують idx2
(3) Якщо існують обидва індекси idx1 і idx2 Це не там, де col1='A' використовує idx1; де col1=A, а col2=B використовує idx2. Його оптимізатор запитів використовує один із раніше поширених індексів. Використовуйте idx1 або idx2.
Видно, що (1) Для таблиці, якщо існує складений індекс на (col1, col2), немає потреби одночасно створювати один індекс на col1. (2) Якщо умови запиту цього вимагають цього, можна додати індекс складання на (col1, col2), коли вже є один індекс на col1, що може частково підвищити ефективність. (3) Немає особливо багато переваг у створенні композитного індексу з кількома полями (що містять 5 або 6 полів) одночасно; відносно кажучи, створення індексу з кількома вузькими полями (що містять лише одне або максимум 2 поля) може досягти кращої ефективності та гнучкості.
5. Чи потрібно мені покривати запит? Зазвичай краще не застосовувати стратегію, яка наголошує на повному покритті запитів. Якщо всі стовпці в клаузі Select перезаписані на некластеризований індекс, оптимізатор розпізнає це і забезпечить хорошу продуктивність. Однак це часто призводить до надто широкого індексу та надмірної залежності від ймовірності використання політики оптимізатором. Зазвичай вузькі індекси використовуються для більшої кількості запитів, що забезпечує кращу продуктивність для великих запитів. |