Программирование и безопасность баз данных мобильных систем

Содержание

Слайд 2

SQLite Индексы

SQLite Индексы

Слайд 3

Индекс

Что такое индекс?
Каким образом применяется?
В каких случаях создается автоматически?

Индекс Что такое индекс? Каким образом применяется? В каких случаях создается автоматически?

Слайд 4

Индекс

Что получаем при добавлении индекса?
Чем за это платим?
Для каких объектов можно создать

Индекс Что получаем при добавлении индекса? Чем за это платим? Для каких
индекс?
Для каких столбцов создаем индекс?

Слайд 5

Индекс

Что такое простой индекс?
Что такое составной индекс?
Что такое уникальный / не уникальный

Индекс Что такое простой индекс? Что такое составной индекс? Что такое уникальный
индекс?
Какой порядок значений (ASC, DESC)?
Что такое индекс покрытия?
Что такое фильтрующий индекс?

Слайд 6

Индекс

Интеграция индекса с таблицей:
кластеризованные
некластеризованные

Индекс Интеграция индекса с таблицей: кластеризованные некластеризованные

Слайд 7

Эффективность индекса

Эффективность индекса оценивает оптимизатор запросов, основываясь на характеристиках запроса:
Селективность
Плотность
Распределение значений

Эффективность индекса Эффективность индекса оценивает оптимизатор запросов, основываясь на характеристиках запроса: Селективность Плотность Распределение значений

Слайд 8

Селективность

Селективность – отношение числа выбираемых записей к общему числу записей
Чем выше селективность

Селективность Селективность – отношение числа выбираемых записей к общему числу записей Чем
– чем больше записей выбирается – тем хуже

Слайд 9

Плотность

Плотность – отношение числа дубликатов значений к общему числу значений
Лучшая плотность –

Плотность Плотность – отношение числа дубликатов значений к общему числу значений Лучшая плотность – уникальные значения
уникальные значения

Слайд 10

Распределение значений

Распределение значений – показатель, как значения ключей индекса распределены по всему

Распределение значений Распределение значений – показатель, как значения ключей индекса распределены по
интервалу возможных значений
Больше слов на букву А, чем на букву Й

Слайд 11

Индекс

Структура индекса:
деревья (tree-index)
частичные
функциональные
двоичные таблицы (bitmap, Oracle)
пространственные индексы (spatial)
полнотекстовые индексы (full text)
XML-индексы
колоночные

Индекс Структура индекса: деревья (tree-index) частичные функциональные двоичные таблицы (bitmap, Oracle) пространственные
индексы (для OLAP-приложений)

Слайд 12

B-tree индекс

B-tree индекс

Слайд 13

B-tree кластеризованный индекс

B-tree кластеризованный индекс

Слайд 14

B-tree некластеризованный индекс

B-tree некластеризованный индекс

Слайд 15

Битовые индексы в Oracle

Битовый индекс создает битовые карты для каждого возможного значения

Битовые индексы в Oracle Битовый индекс создает битовые карты для каждого возможного
столбца, где каждому биту соответствует строка, а значение бита 1 (0) означает, что соответствующая строка содержит (не содержит) индексируемое значение
Предназначен для индексирования столбцов с набором значений
Не подходит для таблиц с частым обновлением
Хорошо подходят для хранилищ данных

Слайд 16

Пространственные индексы MS SQL Server

Пространственные индексы MS SQL Server

Слайд 17

Полнотекстовые индексы MS SQL Server

Полнотекстовые индексы MS SQL Server

Слайд 18

Полнотекстовые индексы MS SQL Server

Средства разбиения по словам и парадигматические модули
Списки

Полнотекстовые индексы MS SQL Server Средства разбиения по словам и парадигматические модули
стоп-слов
Файлы тезауруса
Фильтры

Слайд 19

XML индексы в MS SQL Server

Первичный XML-индекс:
Индексируются все теги, значения и пути

XML индексы в MS SQL Server Первичный XML-индекс: Индексируются все теги, значения

Используется для возвращения скалярных значений или поддеревьев
Вторичные XML-индексы:
FOR PATH —по структуре документа
FOR VALUE —по значениям элементов и атрибутов столбца XML
FOR PROPERTY —для поиска по свойствам
Не могут быть составными
Не могут быть кластеризованными

Слайд 20

Индексы XML в MS SQL Server

Индексы XML в MS SQL Server

Слайд 21

Колоночные индексы в MS SQL Server

Введены с версии 2012
Данные хранятся по

Колоночные индексы в MS SQL Server Введены с версии 2012 Данные хранятся
столбцам
В индекс включаются столбцы, по которым будет производиться поиск
Позволяют получить значительный выигрыш в производительности для больших массивов данных

Слайд 22

Индекс

Что такое фрагментация индекса?
В чем заключается обслуживание индекса?

Индекс Что такое фрагментация индекса? В чем заключается обслуживание индекса?

Слайд 23

Индекс

Как принимается решение о применении индекса?
Каковы критерии принятия решения?
Что такое hints?

Индекс Как принимается решение о применении индекса? Каковы критерии принятия решения? Что такое hints?

Слайд 24

Поиск и сортировка в запросах в SQLite

Полный скан таблицы
Поиск по RowId
Поиск по

Поиск и сортировка в запросах в SQLite Полный скан таблицы Поиск по
индексу (поиск RowId, переход по RowId)
Поиск по нескольким условиям (И)
Поиск по нескольким условиям (ИЛИ)
Покрывающий индекс (включены все поля поиска)

Слайд 25

Поиск и сортировка в запросах в SQLite

Полный скан таблицы

Поиск и сортировка в запросах в SQLite Полный скан таблицы

Слайд 26

Поиск и сортировка в запросах в SQLite

Поиск по RowId

Поиск и сортировка в запросах в SQLite Поиск по RowId

Слайд 27

Поиск и сортировка в запросах в SQLite

Поиск по индексу (поиск RowId, переход

Поиск и сортировка в запросах в SQLite Поиск по индексу (поиск RowId, переход по RowId)
по RowId)

Слайд 28

Поиск и сортировка в запросах в SQLite

Поиск по индексу (поиск RowId, переход

Поиск и сортировка в запросах в SQLite Поиск по индексу (поиск RowId, переход по RowId)
по RowId)

Слайд 29

Поиск и сортировка в запросах в SQLite

Поиск по нескольким условиям (И)

Поиск и сортировка в запросах в SQLite Поиск по нескольким условиям (И)

Слайд 30

Поиск и сортировка в запросах в SQLite

Поиск по нескольким условиям (И)

Поиск и сортировка в запросах в SQLite Поиск по нескольким условиям (И)

Слайд 31

Поиск и сортировка в запросах в SQLite

Покрывающий индекс (включены все поля поиска)

Поиск и сортировка в запросах в SQLite Покрывающий индекс (включены все поля поиска)

Слайд 32

Поиск и сортировка в запросах в SQLite

Поиск по нескольким условиям (ИЛИ)

Поиск и сортировка в запросах в SQLite Поиск по нескольким условиям (ИЛИ)

Слайд 33

Создание индекса

Создание индекса

Слайд 34

Пересоздание и удаление индекса

Пересоздание и удаление индекса

Слайд 35

Именование индекса

Стандартный префикс idx_
Имя таблицы
Имя столбца (столбцов)

Именование индекса Стандартный префикс idx_ Имя таблицы Имя столбца (столбцов)

Слайд 36

Создание индекса

Индекс строится на столбцах одной таблицы
На представлении индекс построить нельзя
На виртуальной

Создание индекса Индекс строится на столбцах одной таблицы На представлении индекс построить
таблице индекс построить нельзя
Нет ограничений на количество индексов для одной таблицы
Количество столбцов в индексе ограничено
Если используется ключевое слово UNIQUE дублирование записей индекса не допускается

Слайд 37

Автоматическое создание индекса

При указании UNIQUE и PRIMARY KEY
Не могут быть удалены DROP

Автоматическое создание индекса При указании UNIQUE и PRIMARY KEY Не могут быть
INDEX
Показаны в sqlite_master
Индекс по RowID не показывается в sqlite_master

Слайд 38

Автоматическое создание индекса

Автоматическое создание индекса

Слайд 39

Индекс на представление

Индекс на представление

Слайд 40

Индексы WHERE

Частичный индекс - это индекс над подмножеством строк таблицы
Например, частичный индекс

Индексы WHERE Частичный индекс - это индекс над подмножеством строк таблицы Например,
может опускать записи, для которых индексируемый столбец NULL
Назначение - уменьшение файла базы данных

Слайд 41

Индексы WHERE

Если в индексе используется OR, то в запросе, использующем индекс, может

Индексы WHERE Если в индексе используется OR, то в запросе, использующем индекс,
быть указано одно из условий
Если в индексе используется точное равенство (=a), то запрос будет использовать индекс при таком же условии (between a and a – не подойдет)
Если в индексе указано IS NOT NULL, то в запросе, использующем <> индекс не применяется

Слайд 42

Составные индексы

Используются для ускорения выполнения запросов по нескольким полям
Порядок расположения столбцов важен!

Составные индексы Используются для ускорения выполнения запросов по нескольким полям Порядок расположения столбцов важен!

Слайд 43

Индексы

Индексы

Слайд 44

Индексы с указанием порядка сортировки

Указание порядка хранения значений ключей оправдано для запроса

Индексы с указанием порядка сортировки Указание порядка хранения значений ключей оправдано для
с предложением ORDER BY

Слайд 45

Индексы

COLLATE определяет последовательность сортировки для текстовых записей

Индексы COLLATE определяет последовательность сортировки для текстовых записей

Слайд 46

Индексы в выражениях

В индексе можно использовать выражение от столбца/набора столбцов

Индексы в выражениях В индексе можно использовать выражение от столбца/набора столбцов

Слайд 47

Индексы в выражениях

Выражения в индексе не могут ссылаться на другие таблицы и

Индексы в выражениях Выражения в индексе не могут ссылаться на другие таблицы
использовать подзапросы и функции, результат которых может измениться

Слайд 48

Оптимизация запросов

Используются только для оперативного анализа
ANALYZE
EXPLAIN
EXPLAIN QUERY PLAN

Оптимизация запросов Используются только для оперативного анализа ANALYZE EXPLAIN EXPLAIN QUERY PLAN

Слайд 49

ANALYZE

Сбор статистики о таблицах и индексах
Хранится в sqlite_stat1
Оптимизатор запросов может получить

ANALYZE Сбор статистики о таблицах и индексах Хранится в sqlite_stat1 Оптимизатор запросов
доступ к информации и использовать ее, чтобы помочь улучшить выбор планирования запросов

Слайд 51

EXPLAIN

Пошаговое исполнение оператора
Оператор при этом не выполняется

EXPLAIN Пошаговое исполнение оператора Оператор при этом не выполняется

Слайд 52

EXPLAIN QUERY PLAN

Показывает, каким образом будет проводится поиск в таблице

EXPLAIN QUERY PLAN Показывает, каким образом будет проводится поиск в таблице

Слайд 53

PRAGMA

INDEX_INFO (indexname) – возвращает одну строку для каждого столбца ключа в названном

PRAGMA INDEX_INFO (indexname) – возвращает одну строку для каждого столбца ключа в
индексе
INDEX_LIST (tablename) – возвращает одну строку для каждого индекса, связанного с данной таблицей
INDEX_XINFO (indexname) – возвращает информацию о каждом столбце в индексе

Слайд 55

Итого

Что такое индекс?
Каким образом применяется?
В каких случаях создается автоматически?
Что такое плотность и

Итого Что такое индекс? Каким образом применяется? В каких случаях создается автоматически?
селективность запроса?
Что получаем при добавлении индекса?
Плюсы и минусы индекса?
Для каких столбцов создаем индекс?
Как обслуживать индексы?

Слайд 56

Индекс

Что такое простой индекс?
Что такое составной индекс?
Что такое уникальный / не уникальный

Индекс Что такое простой индекс? Что такое составной индекс? Что такое уникальный
индекс?
Какой порядок значений (ASC, DESC)?
Что такое индекс покрытия?
Что такое фильтрующий индекс?
Что такое кластеризованный / некластеризованный индекс?
Какие виды индексов есть в SQLite?