Инструменты пользователя

Инструменты сайта


mysql:indexs:main

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
mysql:indexs:main [2023/09/24 23:18]
werwolf [Проектирование индексов]
mysql:indexs:main [2023/09/24 23:29] (текущий)
werwolf
Строка 34: Строка 34:
 ==== Структура индекса ==== ==== Структура индекса ====
  
-\\ Индексы создаются для столбцов таблиц и представлений. Индексы предоставляют путь для быстрого поиска данных на основе значений в этих столбцах. Например,​ если вы создадите индекс по первичному ключу, а затем будете искать строку с данными,​ используя значения первичного ключа, то //SQL Server// сначала найдет значение индекса,​ а затем использует индекс для быстрого нахождения всей строки с данными. Без индекса будет выполнен полный просмотр (сканирование) всех строк таблицы,​ что может оказать значительное влияние на производительность.\\ Вы можете создать индекс на большинстве столбцов таблицы или представления. Исключением,​ преимущественно,​ являются столбцы с типами данных для хранения больших объектов (//LOB//), таких как //image//, //text// или //​varchar(max)//​. Вы также можете создать индексы на столбцах,​ предназначенных для хранения данных в формате //XML//, но эти индексы устроены немного иначе, чем стандартные и их рассмотрение выходит за рамки данной статьи. Также в статье не рассматриваются //​columnstore//​ индексы. Вместо этого я фокусируюсь на тех индексах,​ которые наиболее часто применяются в базах данных //SQL Server//.\\ Индекс состоит из набора страниц,​ узлов индекса,​ которые организованы в виде древовидной структуры — //​сбалансированного дерева//​. Эта структура является иерархической по своей природе и начинается с корневого узла на вершине иерархии и конечных узлов, листьев,​ в нижней части, как показано на рисунке:​\\ {{https://​habrastorage.org/​r/​w1560/​getpro/​habr/​post_images/​e35/​b8e/​5a8/​e35b8e5a8538064b22082a4e5351574a.jpg|Структура индекса}}\\ Когда вы формируете запрос на индексированный столбец,​ подсистема запросов начинает идти сверху от корневого узла и постепенно двигается вниз через промежуточные узлы, при этом каждый слой промежуточного уровня содержит более детальную информацию о данных. Подсистема запросов продолжает двигаться по узлам индекса до тех пор, пока не достигнет нижнего уровня с листьями индекса. К примеру,​ если вы ищете значение 123 в индексированном столбе,​ то подсистема запросов сначала на корневом уровне определит страницу на первом промежуточном (intermediate) уровне. В данном случае первой страница указывает на значение от 1 до 100, а вторая от 101 до 200, таким образом подсистема запросов обратится ко второй странице этого промежуточного уровня. Далее будет выяснено,​ что следует обратиться к третьей странице следующего промежуточного уровня. Отсюда подсистема запросов прочитает на нижнем уровне значение самого индекса. Листья индекса могут содержать как сами данные таблицы,​ так и просто указатель на строки с данными в таблице,​ в зависимости от типа индекса:​ кластеризованный индекс или некластеризованный.\\ \\ +\\ Индексы создаются для столбцов таблиц и представлений. Индексы предоставляют путь для быстрого поиска данных на основе значений в этих столбцах. Например,​ если вы создадите индекс по первичному ключу, а затем будете искать строку с данными,​ используя значения первичного ключа, то //SQL Server// сначала найдет значение индекса,​ а затем использует индекс для быстрого нахождения всей строки с данными. Без индекса будет выполнен полный просмотр (сканирование) всех строк таблицы,​ что может оказать значительное влияние на производительность.\\ Вы можете создать индекс на большинстве столбцов таблицы или представления. Исключением,​ преимущественно,​ являются столбцы с типами данных для хранения больших объектов (//LOB//), таких как //image//, //text// или //​varchar(max)//​. Вы также можете создать индексы на столбцах,​ предназначенных для хранения данных в формате //XML//, но эти индексы устроены немного иначе, чем стандартные и их рассмотрение выходит за рамки данной статьи. Также в статье не рассматриваются //​columnstore//​ индексы. Вместо этого я фокусируюсь на тех индексах,​ которые наиболее часто применяются в базах данных //SQL Server//.\\ Индекс состоит из набора страниц,​ узлов индекса,​ которые организованы в виде древовидной структуры — //​сбалансированного дерева//​. Эта структура является иерархической по своей природе и начинается с корневого узла на вершине иерархии и конечных узлов, листьев,​ в нижней части, как показано на рисунке:​\\ ​ 
 + 
 +{{ :mysql:​indexs:​fetch.jpg |}}\\  
 + 
 + 
 +Когда вы формируете запрос на индексированный столбец,​ подсистема запросов начинает идти сверху от корневого узла и постепенно двигается вниз через промежуточные узлы, при этом каждый слой промежуточного уровня содержит более детальную информацию о данных. Подсистема запросов продолжает двигаться по узлам индекса до тех пор, пока не достигнет нижнего уровня с листьями индекса. К примеру,​ если вы ищете значение 123 в индексированном столбе,​ то подсистема запросов сначала на корневом уровне определит страницу на первом промежуточном (intermediate) уровне. В данном случае первой страница указывает на значение от 1 до 100, а вторая от 101 до 200, таким образом подсистема запросов обратится ко второй странице этого промежуточного уровня. Далее будет выяснено,​ что следует обратиться к третьей странице следующего промежуточного уровня. Отсюда подсистема запросов прочитает на нижнем уровне значение самого индекса. Листья индекса могут содержать как сами данные таблицы,​ так и просто указатель на строки с данными в таблице,​ в зависимости от типа индекса:​ кластеризованный индекс или некластеризованный.\\ \\ 
  
 == Кластеризованный индекс == == Кластеризованный индекс ==
mysql/indexs/main.1695586696.txt.gz · Последние изменения: 2023/09/24 23:18 — werwolf