2010-06-02 5 views

ответ

224

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

68

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

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

3

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

3

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

Если это практично, «как я должен это делать?» вопросов, то StackOverflow было бы лучше спросить.

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

14

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

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

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

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

+5

в целом, его би-дерева, а не бинарное дерево. –

104

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

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

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

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

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

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

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

+41

Я думаю, что аналоговая телефонная книга отлично подходит для новичков ... при условии, что они достаточно взрослые, чтобы знать, что такое телефонная книга! ;) – chrnola

+3

Очень хорошее объяснение необходимости для не кластеризованного индекса –

+0

@chrnola сейчас я чувствую себя старым :( – Guerrilla

33

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

Index Basics
Clustered and Non-Clustered Indexes
Unique and Non-Unique Indexes
Advantages and disadvantages of indexes

+0

Первая ссылка содержит пример, и это отлично! – user1700890

+0

Чтение всех ответов заставило меня задаться вопросом, почему бы не индексировать все. +1 для включения ссылка, содержащая недостатки. –

11

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

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

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

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN); 

Синтаксис UNIQUE INDEX

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN); 
8

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

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

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

  1. Для cocnept-накрест понимания: 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
72

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

More Here

+2

идеальный пример, простой и понятный –

Смежные вопросы