Слайд 3Индекс
Что такое индекс?
Каким образом применяется?
В каких случаях создается автоматически?
![Индекс Что такое индекс? Каким образом применяется? В каких случаях создается автоматически?](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-2.jpg)
Слайд 4Индекс
Что получаем при добавлении индекса?
Чем за это платим?
Для каких объектов можно создать
![Индекс Что получаем при добавлении индекса? Чем за это платим? Для каких](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-3.jpg)
индекс?
Для каких столбцов создаем индекс?
Слайд 5Индекс
Что такое простой индекс?
Что такое составной индекс?
Что такое уникальный / не уникальный
![Индекс Что такое простой индекс? Что такое составной индекс? Что такое уникальный](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-4.jpg)
индекс?
Какой порядок значений (ASC, DESC)?
Что такое индекс покрытия?
Что такое фильтрующий индекс?
Слайд 6Индекс
Интеграция индекса с таблицей:
кластеризованные
некластеризованные
![Индекс Интеграция индекса с таблицей: кластеризованные некластеризованные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-5.jpg)
Слайд 7Эффективность индекса
Эффективность индекса оценивает оптимизатор запросов, основываясь на характеристиках запроса:
Селективность
Плотность
Распределение значений
![Эффективность индекса Эффективность индекса оценивает оптимизатор запросов, основываясь на характеристиках запроса: Селективность Плотность Распределение значений](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-6.jpg)
Слайд 8Селективность
Селективность – отношение числа выбираемых записей к общему числу записей
Чем выше селективность
![Селективность Селективность – отношение числа выбираемых записей к общему числу записей Чем](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-7.jpg)
– чем больше записей выбирается – тем хуже
Слайд 9Плотность
Плотность – отношение числа дубликатов значений к общему числу значений
Лучшая плотность –
![Плотность Плотность – отношение числа дубликатов значений к общему числу значений Лучшая плотность – уникальные значения](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-8.jpg)
уникальные значения
Слайд 10Распределение значений
Распределение значений – показатель, как значения ключей индекса распределены по всему
![Распределение значений Распределение значений – показатель, как значения ключей индекса распределены по](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-9.jpg)
интервалу возможных значений
Больше слов на букву А, чем на букву Й
Слайд 11Индекс
Структура индекса:
деревья (tree-index)
частичные
функциональные
двоичные таблицы (bitmap, Oracle)
пространственные индексы (spatial)
полнотекстовые индексы (full text)
XML-индексы
колоночные
![Индекс Структура индекса: деревья (tree-index) частичные функциональные двоичные таблицы (bitmap, Oracle) пространственные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-10.jpg)
индексы (для OLAP-приложений)
Слайд 14B-tree некластеризованный индекс
![B-tree некластеризованный индекс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-13.jpg)
Слайд 15Битовые индексы в Oracle
Битовый индекс создает битовые карты для каждого возможного значения
![Битовые индексы в Oracle Битовый индекс создает битовые карты для каждого возможного](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-14.jpg)
столбца, где каждому биту соответствует строка, а значение бита 1 (0) означает, что соответствующая строка содержит (не содержит) индексируемое значение
Предназначен для индексирования столбцов с набором значений
Не подходит для таблиц с частым обновлением
Хорошо подходят для хранилищ данных
Слайд 16Пространственные индексы MS SQL Server
![Пространственные индексы MS SQL Server](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-15.jpg)
Слайд 17Полнотекстовые индексы MS SQL Server
![Полнотекстовые индексы MS SQL Server](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-16.jpg)
Слайд 18Полнотекстовые индексы MS SQL Server
Средства разбиения по словам и парадигматические модули
Списки
![Полнотекстовые индексы MS SQL Server Средства разбиения по словам и парадигматические модули](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-17.jpg)
стоп-слов
Файлы тезауруса
Фильтры
Слайд 19XML индексы в MS SQL Server
Первичный XML-индекс:
Индексируются все теги, значения и пути
![XML индексы в MS SQL Server Первичный XML-индекс: Индексируются все теги, значения](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-18.jpg)
Используется для возвращения скалярных значений или поддеревьев
Вторичные XML-индексы:
FOR PATH —по структуре документа
FOR VALUE —по значениям элементов и атрибутов столбца XML
FOR PROPERTY —для поиска по свойствам
Не могут быть составными
Не могут быть кластеризованными
Слайд 21Колоночные индексы в MS SQL Server
Введены с версии 2012
Данные хранятся по
![Колоночные индексы в MS SQL Server Введены с версии 2012 Данные хранятся](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-20.jpg)
столбцам
В индекс включаются столбцы, по которым будет производиться поиск
Позволяют получить значительный выигрыш в производительности для больших массивов данных
Слайд 22Индекс
Что такое фрагментация индекса?
В чем заключается обслуживание индекса?
![Индекс Что такое фрагментация индекса? В чем заключается обслуживание индекса?](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-21.jpg)
Слайд 23Индекс
Как принимается решение о применении индекса?
Каковы критерии принятия решения?
Что такое hints?
![Индекс Как принимается решение о применении индекса? Каковы критерии принятия решения? Что такое hints?](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-22.jpg)
Слайд 24Поиск и сортировка в запросах в SQLite
Полный скан таблицы
Поиск по RowId
Поиск по
![Поиск и сортировка в запросах в SQLite Полный скан таблицы Поиск по](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-23.jpg)
индексу (поиск RowId, переход по RowId)
Поиск по нескольким условиям (И)
Поиск по нескольким условиям (ИЛИ)
Покрывающий индекс (включены все поля поиска)
Слайд 25Поиск и сортировка в запросах в SQLite
Полный скан таблицы
![Поиск и сортировка в запросах в SQLite Полный скан таблицы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-24.jpg)
Слайд 26Поиск и сортировка в запросах в SQLite
Поиск по RowId
![Поиск и сортировка в запросах в SQLite Поиск по RowId](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-25.jpg)
Слайд 27Поиск и сортировка в запросах в SQLite
Поиск по индексу (поиск RowId, переход
![Поиск и сортировка в запросах в SQLite Поиск по индексу (поиск RowId, переход по RowId)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-26.jpg)
по RowId)
Слайд 28Поиск и сортировка в запросах в SQLite
Поиск по индексу (поиск RowId, переход
![Поиск и сортировка в запросах в SQLite Поиск по индексу (поиск RowId, переход по RowId)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-27.jpg)
по RowId)
Слайд 29Поиск и сортировка в запросах в SQLite
Поиск по нескольким условиям (И)
![Поиск и сортировка в запросах в SQLite Поиск по нескольким условиям (И)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-28.jpg)
Слайд 30Поиск и сортировка в запросах в SQLite
Поиск по нескольким условиям (И)
![Поиск и сортировка в запросах в SQLite Поиск по нескольким условиям (И)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-29.jpg)
Слайд 31Поиск и сортировка в запросах в SQLite
Покрывающий индекс (включены все поля поиска)
![Поиск и сортировка в запросах в SQLite Покрывающий индекс (включены все поля поиска)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-30.jpg)
Слайд 32Поиск и сортировка в запросах в SQLite
Поиск по нескольким условиям (ИЛИ)
![Поиск и сортировка в запросах в SQLite Поиск по нескольким условиям (ИЛИ)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-31.jpg)
Слайд 35Именование индекса
Стандартный префикс idx_
Имя таблицы
Имя столбца (столбцов)
![Именование индекса Стандартный префикс idx_ Имя таблицы Имя столбца (столбцов)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-34.jpg)
Слайд 36Создание индекса
Индекс строится на столбцах одной таблицы
На представлении индекс построить нельзя
На виртуальной
![Создание индекса Индекс строится на столбцах одной таблицы На представлении индекс построить](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-35.jpg)
таблице индекс построить нельзя
Нет ограничений на количество индексов для одной таблицы
Количество столбцов в индексе ограничено
Если используется ключевое слово UNIQUE дублирование записей индекса не допускается
Слайд 37Автоматическое создание индекса
При указании UNIQUE и PRIMARY KEY
Не могут быть удалены DROP
![Автоматическое создание индекса При указании UNIQUE и PRIMARY KEY Не могут быть](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-36.jpg)
INDEX
Показаны в sqlite_master
Индекс по RowID не показывается в sqlite_master
Слайд 40Индексы WHERE
Частичный индекс - это индекс над подмножеством строк таблицы
Например, частичный индекс
![Индексы WHERE Частичный индекс - это индекс над подмножеством строк таблицы Например,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-39.jpg)
может опускать записи, для которых индексируемый столбец NULL
Назначение - уменьшение файла базы данных
Слайд 41Индексы WHERE
Если в индексе используется OR, то в запросе, использующем индекс, может
![Индексы WHERE Если в индексе используется OR, то в запросе, использующем индекс,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-40.jpg)
быть указано одно из условий
Если в индексе используется точное равенство (=a), то запрос будет использовать индекс при таком же условии (between a and a – не подойдет)
Если в индексе указано IS NOT NULL, то в запросе, использующем <> индекс не применяется
Слайд 42Составные индексы
Используются для ускорения выполнения запросов по нескольким полям
Порядок расположения столбцов важен!
![Составные индексы Используются для ускорения выполнения запросов по нескольким полям Порядок расположения столбцов важен!](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-41.jpg)
Слайд 44Индексы с указанием порядка сортировки
Указание порядка хранения значений ключей оправдано для запроса
![Индексы с указанием порядка сортировки Указание порядка хранения значений ключей оправдано для](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-43.jpg)
с предложением ORDER BY
Слайд 45Индексы
COLLATE определяет последовательность сортировки для текстовых записей
![Индексы COLLATE определяет последовательность сортировки для текстовых записей](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-44.jpg)
Слайд 46Индексы в выражениях
В индексе можно использовать выражение от столбца/набора столбцов
![Индексы в выражениях В индексе можно использовать выражение от столбца/набора столбцов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-45.jpg)
Слайд 47Индексы в выражениях
Выражения в индексе не могут ссылаться на другие таблицы и
![Индексы в выражениях Выражения в индексе не могут ссылаться на другие таблицы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-46.jpg)
использовать подзапросы и функции, результат которых может измениться
Слайд 48Оптимизация запросов
Используются только для оперативного анализа
ANALYZE
EXPLAIN
EXPLAIN QUERY PLAN
![Оптимизация запросов Используются только для оперативного анализа ANALYZE EXPLAIN EXPLAIN QUERY PLAN](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-47.jpg)
Слайд 49ANALYZE
Сбор статистики о таблицах и индексах
Хранится в sqlite_stat1
Оптимизатор запросов может получить
![ANALYZE Сбор статистики о таблицах и индексах Хранится в sqlite_stat1 Оптимизатор запросов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-48.jpg)
доступ к информации и использовать ее, чтобы помочь улучшить выбор планирования запросов
Слайд 51EXPLAIN
Пошаговое исполнение оператора
Оператор при этом не выполняется
![EXPLAIN Пошаговое исполнение оператора Оператор при этом не выполняется](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-50.jpg)
Слайд 52EXPLAIN QUERY PLAN
Показывает, каким образом будет проводится поиск в таблице
![EXPLAIN QUERY PLAN Показывает, каким образом будет проводится поиск в таблице](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-51.jpg)
Слайд 53PRAGMA
INDEX_INFO (indexname) – возвращает одну строку для каждого столбца ключа в названном
![PRAGMA INDEX_INFO (indexname) – возвращает одну строку для каждого столбца ключа в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-52.jpg)
индексе
INDEX_LIST (tablename) – возвращает одну строку для каждого индекса, связанного с данной таблицей
INDEX_XINFO (indexname) – возвращает информацию о каждом столбце в индексе
Слайд 55Итого
Что такое индекс?
Каким образом применяется?
В каких случаях создается автоматически?
Что такое плотность и
![Итого Что такое индекс? Каким образом применяется? В каких случаях создается автоматически?](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-54.jpg)
селективность запроса?
Что получаем при добавлении индекса?
Плюсы и минусы индекса?
Для каких столбцов создаем индекс?
Как обслуживать индексы?
Слайд 56Индекс
Что такое простой индекс?
Что такое составной индекс?
Что такое уникальный / не уникальный
![Индекс Что такое простой индекс? Что такое составной индекс? Что такое уникальный](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/839806/slide-55.jpg)
индекс?
Какой порядок значений (ASC, DESC)?
Что такое индекс покрытия?
Что такое фильтрующий индекс?
Что такое кластеризованный / некластеризованный индекс?
Какие виды индексов есть в SQLite?