Что такое индекс в SQL? - PullRequest
380 голосов
/ 02 июня 2010

Что такое индекс в SQL? Можете ли вы объяснить или ссылку, чтобы понять ясно?

Где мне использовать индекс?

Ответы [ 11 ]

324 голосов
/ 02 июня 2010

Индекс используется для ускорения поиска в базе данных. В MySQL есть хорошая документация по этому вопросу (которая актуальна и для других серверов SQL): http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

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

Индекс также может быть индексом UNIQUE, что означает, что в этом столбце не может быть повторяющихся значений, или PRIMARY KEY, который в некоторых механизмах хранения определяет, где в файле базы данных хранится значение.

В MySQL вы можете использовать EXPLAIN перед вашим оператором SELECT, чтобы увидеть, будет ли ваш запрос использовать какой-либо индекс. Это хорошее начало для устранения проблем с производительностью. Узнайте больше здесь: http://dev.mysql.com/doc/refman/5.0/en/explain.html

158 голосов
/ 01 сентября 2012

Кластерный индекс похож на содержимое телефонной книги. Вы можете открыть книгу в «Хильдич, Дэвид» и найти всю информацию обо всех «Хильдичах» рядом друг с другом. Здесь ключи для кластеризованного индекса (фамилия, имя).

Это делает кластеризованные индексы отличными для получения большого количества данных на основе запросов на основе диапазона, поскольку все данные расположены рядом друг с другом.

Поскольку кластерный индекс на самом деле связан с тем, как хранятся данные, для каждой таблицы возможен только один из них (хотя вы можете использовать мошенничество для имитации нескольких кластеризованных индексов).

Некластеризованный индекс отличается тем, что их может быть много, и они затем указывают на данные в кластерном индексе. Вы могли бы иметь, например, некластеризованный индекс в конце телефонной книги, на котором указана (город, адрес)

Представьте, что вам нужно искать в телефонной книге всех людей, которые живут в «Лондоне» - только с кластеризованным индексом вам придется искать каждый отдельный элемент в телефонной книге, поскольку ключ кластерного индекса включен. (фамилия, имя) и, как следствие, люди, живущие в Лондоне, случайным образом разбросаны по всему индексу.

Если у вас есть некластеризованный индекс для (города), тогда эти запросы могут выполняться намного быстрее.

Надеюсь, это поможет!

139 голосов
/ 18 мая 2014

Очень хорошая аналогия - считать индекс базы данных индексом в книге. Если у вас есть книга о странах и вы ищете Индию, то зачем вам пролистывать всю книгу - что эквивалентно полному сканированию таблицы в терминологии базы данных - когда вы можете просто перейти к индексу в конце Книга, которая расскажет вам точные страницы, где вы можете найти информацию об Индии. Аналогично, так как индекс книги содержит номер страницы, индекс базы данных содержит указатель на строку, содержащую значение, которое вы ищете в своем SQL.

Подробнее здесь

80 голосов
/ 02 июня 2010

Индекс используется для ускорения выполнения запросов. Это достигается за счет уменьшения количества страниц данных базы данных, которые необходимо посетить / отсканировать.

В SQL Server кластеризованный индекс *1003* определяет физический порядок данных в таблице. В таблице может быть только один кластеризованный индекс (кластеризованный индекс - это таблица). Все остальные индексы в таблице называются некластеризованными.

45 голосов
/ 25 сентября 2012

Все индексы предназначены для быстрого поиска данных .

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

Аналогичным образом индексы в базе данных могут помочь запросам быстро находить данные. Если вы новичок в индексах, следующие видео могут быть очень полезны. На самом деле я многому научился у них.

Основы указателя
Кластерные и некластерные индексы
Уникальные и неуникальные индексы
Преимущества и недостатки индексов

22 голосов
/ 02 июня 2010

Ну, в общем, индекс B-tree. Существует два типа индексов: кластеризованные и некластеризованные.

Clustered index создает физический порядок строк (это может быть только один и в большинстве случаев это также первичный ключ - если вы создаете первичный ключ для таблицы, вы также создаете кластерный индекс для этой таблицы) .

Некластеризованный индекс также является двоичным деревом, но он не создает физический порядок строк. Таким образом, конечные узлы некластерного индекса содержат PK (если он существует) или индекс строки.

Индексы используются для увеличения скорости поиска. Потому что сложность O (log N). Индексы это очень большая и интересная тема. Я могу сказать, что создание индексов для большой базы данных иногда является искусством.

19 голосов
/ 04 декабря 2013

INDEXES - легко найти данные

UNIQUE INDEX - повторяющиеся значения не допускаются

Синтаксис для INDEX

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

Синтаксис для UNIQUE INDEX

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
11 голосов
/ 01 января 2014

INDEX - это метод оптимизации производительности, который ускоряет процесс поиска данных. Это постоянная структура данных, которая связана с таблицей (или представлением) для повышения производительности при извлечении данных из этой таблицы (или представления).

Поиск по индексу применяется более конкретно, когда ваши запросы включают фильтр WHERE. Иначе, то есть запрос без WHERE-фильтра отбирает целые данные и обрабатывает их. Поиск всей таблицы без INDEX называется Table-scan.

Вы найдете точную информацию для Sql-индексов в понятной и надежной форме: перейдите по этим ссылкам:

  1. Для лучшего понимания: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Overview-and-Optimizations.html
  2. Для понимания по реализации: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimizations.html
10 голосов
/ 20 сентября 2018

Сначала нам нужно понять, как выполняется нормальный (без индексации) запрос. Он в основном пересекает каждую строку одну за другой и, когда находит данные, возвращает. Смотрите следующее изображение. (Это изображение было взято из этого видео .)

Without indexing Итак, предположим, что запрос должен найти 50, он должен будет прочитать 49 записей в виде линейного поиска.

См. Следующее изображение. (Это изображение было взято из этого видео )

enter image description here

Когда мы применяем индексирование, запрос быстро обнаруживает данные, не считывая каждый из них, просто удаляя половину данных в каждом обходе, как бинарный поиск. Индексы mysql хранятся в виде B-дерева, где все данные находятся в конечном узле.

7 голосов
/ 02 июня 2010

Если вы используете SQL Server, одним из лучших ресурсов является собственная электронная книга Books Online, которая поставляется вместе с установкой! Это первое место, на которое я бы сослался для ЛЮБЫХ тем, связанных с SQL Server.

Если это практично, "как мне это сделать?" вопросы, тогда лучше задать StackOverflow.

Кроме того, я давно не вернулся, но sqlservercentral.com был одним из лучших сайтов, связанных с SQL Server.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...