курсовая. работа. Содержание введение Понятие и типы индексов Индексирование таблиц Применение индексов в sql заключение Литература введение
Скачать 34.79 Kb.
|
СОДЕРЖАНИЕ Введение……………………………………………………………………………..3 Понятие и типы индексов…………….……………………………………...4 Индексирование таблиц……………………………………………………...7 Применение индексов в SQL………………………………………………...9 Заключение…………………………………………………………………………..11 Литература…………………………………………………………………………..12 ВВЕДЕНИЕ Таблицы в базе данных могут иметь большое количество строк, хранящихся в случайном порядке, и может потребоваться много времени для поиска таблицы по определенному критерию, отображая ее последовательно по строкам. Индекс состоит из значений одного или нескольких столбцов таблицы и декомпозиции указателей на соответствующие строки таблицы, что позволяет искать строки, соответствующие критериям поиска. Более быстрая работа с использованием индексов достигается в первую очередь за счет того, что они имеют структуру, оптимизированную для декомпозиции. Одним из важнейших способов достижения высокой производительности SQL Server является использование каталогов. Индекс ускоряет процесс запроса, обеспечивая быстрый доступ к строкам данных в таблице, подобно тому, как указатель в книге помогает быстро найти необходимую информацию. В этой статье я приведу краткий обзор каталогов в SQL Server и объясню, как они организованы в базе данных и как они помогают ускорить выполнение запросов в базе данных. Индекс - это список, реестр, указатель и указательный палец, комбинация цифр, букв или других символов, указывающих на местоположение элемента в наборе или характеризующих состояние данной системы, например, активность, производительность, улучшение, изменение чего-либо. Плохо спроектированные каталоги и их недостаточное количество являются основным источником узких мест в приложениях баз данных. Разработка эффективных каталогов имеет решающее значение для достижения высокой производительности баз данных и приложений. Это руководство по проектированию каталогов SQL Server содержит сведения об архитектуре каталогов и предоставляет рекомендации по созданию эффективных каталогов в соответствии с потребностями ваших приложений. Сам каталог хранится на индексных страницах в SQL Server. ПОНЯТИЕ И ВИДЫ ИНДЕКСОВ Индекс SQL Server - это структура диска или памяти, связанная с таблицей или представлением, которая ускоряет получение строк в таблице или представлении. Индекс содержит ключи, созданные из одного или нескольких столбцов в таблице или представлении. Для индексов на диске эти ключи хранятся в виде структуры B-дерева, которая поддерживает быстрый поиск строк по значениям ключей в SQL Server. Выбор правильных индексов для базы данных и ее рабочей нагрузки — это решение сложной задачи о соотношении скорости обработки запроса и стоимости обновления. Узкие индексы, то есть индексы, в ключе которых мало столбцов, требуют меньше места на диске и меньше текущих издержек. С другой стороны, широкие индексы охватывают больше запросов. Прежде чем удастся найти наиболее эффективный индекс, возможно, придется поэкспериментировать с несколькими различными вариантами. Добавление, изменение и удаление индексов не влияет на схему базы данных или конструкцию приложений. Следовательно, эксперименты с различными индексами можно проводить без каких-либо опасений. Индексация базы данных определяется на основе ее атрибутов индексации. Два основных типа методов индексации: Первичная – это упорядоченный файл с фиксированной длиной и двумя полями. Первое поле — это тот же первичный ключ, а второе поле указывает на этот конкретный блок данных. В первичном индексе всегда существует отношение один к одному между записями в таблице индекса. Вторичная индекс может быть создан с помощью поля, которое имеет уникальное значение для каждой записи, и это должен быть ключ-кандидат. Он также известен как некластеризованный индекс. Вторичные индексы улучшают производительность запросов, в которых для поиска используются атрибуты, отличные от атрибута первичного ключа. Однако это улучшение производительности запросов требует дополнительной обработки, связанной с управлением индексами, поскольку информация в базе данных обновляется. Эта проблема решается на этапе физического проектирования базы данных. Этот двухуровневый метод индексации базы данных используется для уменьшения размера экрана первого уровня. По этой причине на первом уровне выбран большой диапазон чисел; размер дисплея всегда маленький. Так же индексы можно разделить на кластеризованные и некластеризованные. Некластеризованный индекс может храниться в той же файловой группе, что и базовая таблица, или в другой группе. Кластеризованный индекс имеет много значений, но общая характеристика состоит в том, чтобы рассматривать два физических объекта как единое целое. Например, в области сети кластер - это группа из двух или более серверов, которые отображаются как единая логическая единица и используются для обеспечения отказоустойчивости и балансировки нагрузки. В SQL Server кластер означает индекс, смешанный с данными. Таблица является частью индекса или индекс является частью таблицы, в зависимости от вашей точки зрения. Фактически, для кластерного индекса существуют сами страницы данных таблицы. Поскольку данные в самой таблице являются частью индекса, очевидно, что для таблицы может быть создан только один кластеризованный индекс. В SQL Server кластеризованный индекс по определению является уникальным индексом. Это означает, что все регистрационные ключи должны быть уникальными. Если есть записи с одинаковыми значениями, SQL Server делает их уникальными, добавляя числа из внутреннего счетчика (невидимого снаружи). Архитектура SQL Server имеет такую функциональность, потому что есть только два способа найти необходимую запись по ключу кластерного индекса. Некластеризованный индекс содержит все ключевые значения, отсортированные в соответствии с кластеризованным ключом. Сами данные не хранятся в индексе и извлекаются из таблицы с помощью ключа кластеризованного индекса. Кластеризованный индекс использует локатор строк и является частью некластеризованного индекса. Этот факт приводит к важному правилу SQL Server: ключи кластера должны быть как можно короче. Каждый некластерный индекс будет использовать значения кластерного индекса. Следовательно увеличение размера кластерного индекса приводит к многократному увеличению требований по памяти для всех не кластерных индексов. Последнее приводит к увеличению времени на процессы чтения, сканирования данных и, как следствие, к снижению общей производительности системы. Увеличение длины ключа приводит к снижению количества записей индекса, способных уместиться в пределах одной страницы, как следствие – к увеличению операций чтения-записи. Некластеризованный индекс хранится в одном месте, а физические данные для таблицы хранятся в другом месте. Это похоже на индексную страницу книги, о которой мы говорили ранее. Индексная страница книги находится в одном месте, а содержание книги - в другом. Это позволяет использовать более одного некластеризованного индекса для каждой таблицы, как мы видели ранее. И как именно это делается? Предположим, вы пишете запрос, который находит запись в столбце, для которого вы уже создали некластеризованный индекс. По сути, некластеризованный индекс содержит следующее: - записи столбца, для которых вы создали индекс - адреса соответствующей строки, которой принадлежит запись столбца Выбор подходящего места для хранения индексов может повысить производительность запросов за счет увеличения дискового ввода-вывода. Например, если некластеризованный индекс хранится в файловой группе на другом диске, чем файловая группа таблицы, производительность может быть улучшена, поскольку он позволяет вам получить доступ к нескольким дискам одновременно. Кластерные и некластеризованные индексы могут использовать схему секционирования, охватывающую несколько файловых групп. Секционирование делает большие таблицы и индексы более управляемыми, позволяя вам быстро и эффективно получать доступ к записям и управлять ими, сохраняя при этом целостность всей коллекции. Разделение определяет, нужно ли выровнять индекс, то есть должен ли индекс быть разделен, как таблицы, или его можно разделить по-другому. ИНДЕКСИРОВАНИЕ ТАБЛИЦ Индексирование позволяет ускорить сортировку и поиск данных в таблице. Можно проиндексировать числовые, денежные, текстовые, логические поля, а также поля счетчика и даты. Не создавайте слишком много индексов в одной таблице, так как это замедлит вставку и изменение ее данных. Индексированное поле может содержать как уникальные, так и повторяющиеся значения. Например, в таблице «Сотрудники» можно проиндексировать поле EmployeeID, которое содержит уникальные значения кода, или поле «Фамилия», которое может содержать повторяющиеся значения. Вы не можете создавать индексы для полей MEMO, гиперссылок и объектов OLE. Вы можете создавать сколько угодно индексов. Индексы создаются при сохранении макета таблицы и автоматически обновляются по мере ввода и изменения записей. Пользователь может в любой момент добавить новые или удалить ненужные индексы в режиме конструктора таблиц. Индекс - это внутренняя служебная таблица, содержащая два столбца. Первый столбец содержит значения индексируемого поля, второй - адреса записей, имеющих это значение. Индексы позволяют быстро искать строку с заданным значением поля индекса. Ключевые поля таблицы индексируются автоматически. Структура индекса связана с конкретным ключом поиска и содержит записи, состоящие из значения ключа и адреса логической записи в файле, содержащем это значение ключа. Файл, содержащий логические записи, называется файлом данных, а файл, содержащий записи индекса, называется файлом индекса. Значения в индексном файле упорядочены по полю индекса, которое обычно основано на одном атрибуте. По мере того как размер индексного файла увеличивается и его содержимое охватывает большое количество страниц, время поиска нужного индекса также значительно увеличивается. Обратившись к многоуровневому индексу, вы можете попытаться решить эту проблему, сузив диапазон поиска. Эта операция выполняется с индексом таким же образом, как и в случае файлов другого типа, то есть путем деления индекса на несколько меньших субиндексов и создания индекса для этих субиндексов. На каждой стороне файла данных могут храниться два набора данных. Кроме того, в целях иллюстрации здесь показано, что каждая страница индекса также хранит два набора индексов, но на практике каждая такая страница может хранить намного больше наборов индексов. Каждая запись индекса содержит значение ключа доступа и адрес страницы. Сохраненное значение ключа доступа является наибольшим на странице, к которой осуществляется доступ. Индексирование - это способ обеспечить быстрый доступ к значениям столбца или комбинации столбцов. Без использования какого-либо метода сортировки данных единственный способ просмотреть значение столбца со стороны СУБД - это последовательное сканирование каждой строки от начала до конца таблицы, так называемое сканирование таблицы. Производительность этого сканирования пропорциональна размеру таблицы, размеру физической страницы базы данных и длине строки в таблице. Наполнитель - очень важный параметр для уменьшения фрагментации. Он указывает процент бокового покрытия. Если есть сотни заполнителей, это означает, что страницы на момент создания индекса заполнены на 100%. Это обеспечивает наименьшую фрагментацию данных на жестком диске, но при вставке или изменении записи может произойти разделение страницы, что приведет к дополнительным операциям. Если заполнитель меньше 100, на каждой вновь созданной странице индекса остается свободное место, и при вставке данных разделение не выполняется. То есть значение 100 имеет смысл при работе со статическими данными или для таблиц, в которых только данные добавляются в конец таблицы. Опыт показывает, что часто обновляемые таблицы следует считать оптимальным значением 80. Также стоит помнить, что SQL Server не придерживается строго определенных чисел - если, например, значение заполнения установлено на 50 и страница может содержать информацию о 13 записей, поэтому SQL Server сохранит 7 записей, что дает фактическое заполнение 53,8. ПРИМЕНЕНИЕ ИНДЕКСОВ В SQL Индексы в MySQL — отличный инструмент для оптимизации SQL запросов. Чтобы понять, как они работают, посмотрим на работу с данными без них. На жестком диске нет файла это так называемые блоки. Файл обычно занимает несколько блоков. Каждый блок знает, какой блок следует за ним. Файл разбивается на фрагменты, и каждый фрагмент сохраняется в пустом фрагменте. При чтении файла мы последовательно перебираем все блоки и собираем файл из частей. Блоки файла могут быть разбросаны по диску (фрагментация). Это замедлит чтение файла, так как вам нужно будет пропускать разные части диска. Когда мы ищем что-то внутри файла, нам нужно просмотреть все блоки, в которых это хранится. Если файл очень большой, количество блоков будет значительным. Необходимость перехода от блока к блоку, которые могут находиться в разных местах, значительно замедлит выборку данных. MySQL может использовать только один индекс для каждого запроса (если MySQL не может объединить результаты выбора по нескольким индексам). Следовательно, составные индексы необходимо использовать для запросов, использующих несколько столбцов. Составные индексы особенно полезны для обеспечения уникальности комбинации столбцов таблицы, когда нет уникального столбца, который однозначно идентифицирует строку. Индексы и ключи. Для создания как одиночных, так и составных индексов обычно рекомендуется выбирать столбцы, которые часто можно использовать в качестве фильтра условий в предложении WHERE. Если нужен только один столбец, используется единственный индекс. Если у вас есть несколько столбцов, которые часто используются в качестве фильтра в предложении WHERE, лучшим выбором будет составной индекс. Разберемся с понятием индексы (декады) - это специальные таблицы, которые поисковые системы используют для поиска данных. Их активное использование играет важную роль в повышении производительности sql-серверов. Индекс, как указатель на хорошо подготовленную книгу, помогает быстро получить доступ к необходимым строкам данных в таблице, соответствующей запросу. Таким образом, их использование позволяет быстрее выполнять запрошенный запрос. Например, чтобы получить все страницы по выбранной теме в книге, необходимо сначала обратиться к списку тем, а затем выбрать нужные страницы. Для этого нужно создать каталог по выбранной теме. На основании этого будут выбраны ссылки на страницы книги по затронутой теме. Используя значения, заданные первичным ключом, sql server находит нужный индекс и быстро выбирает все строки, содержащие необходимые данные. Если не используется индекс, каждая строка таблицы будет сканироваться для поиска информации. Это значительно снизит вашу производительность и увеличит время деконструации. Столбцы, используемые для хранения данных крупногабаритных объектов. Для работы с данными, представленными в данном формате, используется другой xml-индекс, чем стандартный. Если предложение WHERE оператора SELECT содержит условие поиска данных в одном столбце, вы должны создать для него индекс. Это условие очень важно в условиях высокой селективности. Но при постоянном уровне селективности 80% и более это будет совершенно бесполезно. Простое сканирование табличных данных займет меньше времени. Если условие поиска включает оператор AND в часто используемом запросе, лучше всего создать составной индекс, включающий все столбцы таблицы, указанные в предложении WHERE оператора SELECT. Существует также двоичный поиск - это эффективный алгоритм поиска записи из отсортированного списка записей. Он работает, многократно разделяя данные пополам и проверяя, находится ли запись, которую вы ищете с помощью вашего запроса, до или после записи в середине данных. Если значение вашей поисковой записи меньше среднего значения, это сокращает поиск до нижней половины, в противном случае он сокращает поиск до верхней половины. Индекс базы данных упорядочен так же, как и индекс книги, и каждая запись индекса содержит имя искомого объекта и один или несколько указателей (идентификаторов записей) на его местоположение. Как обязательный компонент системы управления базы данных, они могут иметь большое значение и в некотором смысле улучшать ее производительность. ЗАКЛЮЧЕНИЕ База данных рассматривает все возможные пути выполнения запроса, а затем выбирает наиболее оптимальный путь. Каждый из возможных путей называется «Планом запроса». По сути, это последовательность шагов, используемых для доступа к данным в системе управления реляционной базой данных SQL. И эта функция системы управления базой данных, определяющая наиболее эффективный способ выполнения заданного запроса с учетом всех возможных планов запросов, называется «Оптимизатором запросов», индексирование нескольких столбцов. Таким образом, полезно использовать индексы для баз данных в базах данных, которые обновляют новые данные по расписанию (в непиковые часы), а не для производственных баз данных, которые будут получать новые обновления все время. Это связано с тем, что, если база данных постоянно получает обновления, индексы не будут обновляться и, следовательно, останутся непригодными для использования. Индекс сокращает процесс поиска данных, сортируя данные физически и логически. Таким образом, он выглядит как набор ссылок на данные, расположенных в соответствии с выбранным столбцом таблицы. Такой столбец называется индексированным столбцом. Индексы находятся в таблице и, по сути, являются внутренними механизмами системы sql Server, которые помогают оптимально получать доступ к данным. Можно создать стандартный индекс во всех столбцах, кроме данных. Индекс в базе данных похож на предметный указатель в книге. вспомогательная структура, связанная с файлом и предназначенная для поиска информации по тому же принципу, что и книга с указателем предметов. Индекс позволяет избежать последовательного или пошагового сканирования файла на наличие необходимых данных. При использовании индексов в базе данных объектом поиска может быть одна или несколько файловых записей. ЛИТЕРАТУРА Индексы: сайт - https://www.sql.ru/articles/mssql/03013101indexes.shtml#3 2020 (дата обращения: 26.10.2021). – Текст: электронный. Составные индексы: сайт - https://webformyself.com/sql-indeksy/ 2021 Webfor Myself (дата обращения: 27.10.2021). – Текст: электронный. Все, что необходимо знать про индексы: сайт - https://otus.ru/journal/vse-chto-neobhodimo-znat-pro-indeksy-ms-sql/ 2021 OTUS (дата обращения: 28.10.2021). – Текст: электронный. Как использовать индексы для оптимизации SQL-запросов: сайт https://zen.yandex.ru/media/id/5e048b1b2b616900b081f1d9/kak-ispolzovat-indeksirovanie-dlia-optimizacii-sqlzaprosov-5fc7bf468ea99a6dd9a8590c 2021 (дата обращения: 25.10.2021). – Текст: электронный. Индексирование в базах данных: сайт - http://bourabai.ru/dbt/dbms/001.htm Индексирование: сайт - http://wiki.mvtom.ru/index.php/Индексирование 2021 (дата обращения: 27.10.2021). – Текст: электронный. |