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

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

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

+398
источник поделиться
12 ответов

Индекс используется для ускорения поиска в базе данных. В 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

+337
источник

Кластеризованный индекс похож на содержимое телефонной книги. Вы можете открыть книгу в "Hilditch, David" и найти всю информацию для всей "Хильдич" рядом друг с другом. Здесь ключи для кластеризованного индекса (lastname, firstname).

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

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

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

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

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

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

+166
источник

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

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

+139
источник

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

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

+81
источник

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

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

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

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

+47
источник

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

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

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

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

+24
источник

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

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

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

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

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

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
+21
источник

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

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

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

+13
источник

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

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

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

enter image description here

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

+12
источник

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

+7
источник

Если вы используете SQL Server, одним из лучших ресурсов является его собственный Интернет-магазин, который поставляется вместе с установкой! Это первое место, которое я бы назвал для ЛЮБОЙ темы, связанной с SQL Server.

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

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

+7
источник

Индекс используется для ускорения поиска в базе данных. В 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

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос