Возможно, вы слышали об этом термине при работе с базами данных. Для меня это был новый термин, и я понятия не имел, что это такое и как они будут работать. Что ж, давай узнаем.

Индексы

Почти все типы баз данных в настоящее время поддерживают индексацию. И создание индекса для базы данных также не является сложной задачей. Запрос такой простой. Но мой вопрос был в том, как они работают.

Что такое индекс?

Самый простой ответ, который я получил в Интернете, заключается в том, что индекс - это структура данных. Затем возникает еще один вопрос. Какая структура данных? На этот вопрос нет простого ответа. Но в большинстве случаев индекс представляет собой двоичную древовидную структуру данных. Давайте рассмотрим простой пример

Рассмотрим приведенный ниже запрос

ВЫБРАТЬ * ИЗ игроков в крикет, ГДЕ first_name = «Стив»;

Чтобы извлечь эти две записи с именем Стив, база данных должна будет пройти через все 1001 запись в базе данных. Это явно выглядит неэффективным. Что делать, если у нас есть другая структура данных, в которой имеется хорошо организованный столбец «Имя» и каждая запись указывает на строку таблицы. Это было бы так эффективно. Что-то вроде ниже

Хорошо, теперь поговорим о математике. Временная сложность поиска в несортированном массиве составляет O (n). Временная сложность поиска в двоичном дереве составляет O (log (n)), что делает запрос чрезвычайно эффективным. То же самое относится к вставке и удалению. Итак, теперь очевидно, как работают индексы. Но когда мы углубимся в индексацию, все не так просто. Хотя двоичное дерево является наиболее часто используемой структурой данных для индексации, могут быть сценарии, в которых используются структуры R-дерева или индексы хеш-таблицы. Это зависит от ваших требований.

В большинстве баз данных следующий синтаксис будет работать для создания индекса

создать индекс firstName_index ON cricketers (first_name);

Проблема, с которой я столкнулся, когда работал с индексами, заключается в том, как я собираюсь узнать, используется ли мой индекс при выполнении запроса. Первое, что мы должны знать, это то, что большую часть времени база данных принимает решение, когда использовать индекс, а когда нет. Мы не можем заставить его использовать наш индекс. Но все же есть способы сделать это.

Рассмотрим индекс, который мы создали, когда выполняем запрос, связанный с именем столбца first_name. База данных найдет, есть ли индексы, созданные для этого столбца.

Если есть, то он решит, стоит ли использовать этот индекс для выполнения этого запроса. Например, могут быть случаи, когда не использовать индекс более эффективно. Например, наличие двух или трех записей данных может привести к тому, что index. Но опять же, это сильно зависит от базы данных, которую мы используем.

Для таких типов баз данных, как H2, MySQL, Postgres, мы можем использовать ключевое слово «объяснение» перед запросом, который мы выполняем. Это обеспечит план выполнения.

объясните SELECT * FROM cricketers WHERE first_name = ‘Steve’;

Но для типов базы данных Oracle, DB2, MSSQL это не сработает. Для таких баз данных вы можете использовать клиент базы данных, такой как Datagrep или DBeaver. DBeaver не поддерживает объяснение DB2, поэтому я рекомендую использовать Datagrep.

Это все об индексах. Если вы хотите опробовать некоторые индексы, не стесняйтесь использовать индексы, используемые в сервере идентификации WSO2. перейдите к

{IS_HOME} / dbscripts

Получить скрипты БД.

Хотя существует множество полезных индексов, у индексов также мало недостатков.

  1. В зависимости от размера таблицы индекс занимает значительный объем места.
  2. Когда данные обновляются, базе данных также необходимо обновить индексы, что может снизить производительность.

Итак, index - это то, что мы должны использовать, но только там, где это необходимо. Есть еще несколько терминов, связанных с областью действия базы данных. Такие как табличные пространства, буферные пулы. Познакомимся с ними в другой статье.

Ссылки

[1] https://dzone.com/articles/database-btree-indexing-in-sqlite

[2] https://www.programmerinterview.com/database-sql/what-is-an-index/