2010-03-23 3 views

ответ

0

Look here, на полпути вниз страницы, он говорит:

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

скорость звучит как отличная причина для меня .. или я не хватает вашей точки?

Преимущество кластерного индекса состоит в том, что к нему можно получить доступ (и, таким образом, выполнить поиск) с меньшим количеством операций io, чем «нормальные» индексы. Зная это, вы можете оптимизировать доступ к БД и, таким образом, ваше приложение, разместив кластерный индекс, где он вам больше всего пригодится.

+1

Я думаю, что он ищет конкретный пример, чтобы обернуть голову вокруг него. – ceejayoz

3

кластерных индексов

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

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

По умолчанию, с InnoDB, ваш основной индекс является кластеризованным индексом.

Пример использования кластерных индексов

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

SELECT key_word, hits FROM keywords 
WHERE key_word LIKE 'britney s%' 
ORDER BY key_word 
LIMIT 10 

Вы бы хотите, чтобы ваш первичный ключ (кластерный индекс), чтобы быть на key_word.

Сравнение с некластеризованными индексами

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

MySQL Документация на кластерных индексах

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

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

MySQL Clustered and Secondary Indexes

+0

Будет ли InnoDB использовать уникальный индекс для кластера, если первичного ключа нет? Или он по-прежнему будет использовать невидимый внутренний первичный ключ? – symfony

+0

@symfony, он будет использовать внутренний первичный ключ. Поэтому лучше всего иметь первичный ключ в каждой таблице с помощью InnoDB. –

+0

К вашему обновленному примеру: я думаю, что нормального индекса достаточно, так как набор результатов имеет размер 10 записей, а не много. Правильно, или я понимаю это неправильно? – symfony

1

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

Таким образом, такие запросы, как select sum (amount) from transactiondetails where TransactionDate > 'jan 01 2010' and TransactionDate < 'feb 01 2010', будут использовать кластерный индекс для поиска и придут к результату более эффективным способом.

+0

Я не думаю, что это причина использовать кластерный индекс. Нормального индекса на TransactionDate достаточно, не так ли? – symfony

+0

@symfony, только если индекс был составным индексом и включал как transactionDate, так и сумму. В противном случае диск все равно должен отскакивать, чтобы получить столбец количества для каждой записи. –

+3

Кластеризованный индекс фактически заказывает физические данные в соответствии с индексом (именно поэтому у вас обычно может быть только 1 кластеризованный индекс на таблицу). Это делает сканирование очень эффективным, потому что он может просто сканировать страницы последовательно с диска. Используя обычный индекс, страницы данных разбросаны вокруг, и время поиска со страницы на страницу становится дорогим. –

1

Настоящая адресная книга (a dead tree edition), упорядоченная по имени, напоминает кластерный индекс в его структуре и назначении.

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

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

Источник: Wikipedia: Database Index - Clustered

+0

Будет ли «объяснять» показывать специальную информацию, когда используется кластерный индекс? – symfony

0

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

См происхождение ответа в Stackoverflow

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

  • Нет связанных вопросов^_^