Обзор Что такое единый индекс и что такое составный индекс? Когда создавать новый составный индекс и на что стоит обратить внимание в композитном индексе? Эта статья в основном представляет собой краткое изложение некоторых обсуждений в Интернете.
Один. Концепция
Один индекс — это ситуация, когда индекс размещён в одном столбце, то есть утверждение о создании нового индекса реализуется только на одном столбце.
Пользователи могут создавать индексы на нескольких столбцах, которые называются композитными индексами (комбинированные индексы). Составные индексы создаются точно так же, как и отдельные индексы. Но составные индексы требуют меньше накладных расходов при работе с базой данных и могут заменить несколько отдельных индексов. Когда количество строк в таблице значительно превышает количество ключей, этот метод может значительно ускорить скорость запросов таблицы.
Существуют два понятия одновременно: узкие индексы и широкие индексы, узкие индексы относятся к индексам с 1-2 столбцами и обычно относятся к одному индексу, если не указано иное. Широкий индекс — это индекс с более чем двумя столбцами.
Важным принципом проектирования индексов является использование узких индексов вместо широких, поскольку узкие индексы обычно более эффективны, чем объединённые. Более узкие индексы дают оптимизатору больше выбора, что часто помогает повысить производительность.
Два. Использование
Создайте индекс Создать индекс IDX1 на таблице 1(COL1,COL2,COL3) Спрашивать выберите * из таблицы 1, где col1 = a и col2 = B и col3 = C
В данный момент оптимизатор запросов не сканирует таблицу, а напрямую берёт данные из индекса, потому что в индексе есть эти данные, которые называются наложением, и скорость запроса очень высокая.
Три. Примечания:
1. Когда использовать сложный индекс В условии где поле индексируется, и если используется несколько полей, используется составный индекс. В целом, не строите индексы в поле 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 перезаписаны некластерным индексом, оптимизатор распознает это и обеспечит хорошую производительность. Однако это часто приводит к чрезмерному индексу и чрезмерной зависимости от вероятности того, что оптимизатор использует полис. Обычно узкие индексы используются для большего количества запросов, что обеспечивает лучшую производительность для больших запросов. |