Вопрос

В документах для различных ORMS они всегда предоставляют способ создания индексов и т. Д. Они всегда упоминают, несомненно, создают соответствующие индексы для эффективности, как если бы это не присущее знания для бесконсионного письменного Sqler, который необходимо использовать Орм. Мое понимание индексов (за пределами PK) в основном: если вы планируете сделать LIKE Запросы (то есть, поиск) на основе содержимого столбца, вы должны использовать полный текстовый индекс для этого столбца. Что еще я должен знать относительно индексов (в основном относящихся к эффективности)? Я чувствую, что в моем дверном этапе есть мир знаний, но есть огромная сложенная мышь, заклинилась под ним, поэтому я не могу пройти (я не знаю, почему я чувствовал, что мне нужно было сказать это, но Спасибо за предоставление дивана).

Это было полезно?

Решение

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

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

Итак ... Вы создадим индекс, когда у вас есть информация, на которой вам нужно обыскивать часто. Нормальные индексы не помогут вам для «частичных» ищет как запросы, но в любое время вам нужно получить набор результатов, где поле X имеет определенные значения (ы), они поддерживают СУБД, чтобы «сканировать» всю таблицу В поисках соответствующих значений.

Они также помогают, когда вам нужно сортировать на столбце.

Другая вещь, чтобы иметь в виду; Если СУБД позволяет создавать отдельные индексы, которые имеют несколько полей, обязательно изучите эффекты этого, специфичные для вашей СУБД. Индекс, который включает в себя несколько полей, вероятно, только будет полностью (или вообще) полезным, если все эти поля используются в запросе. И наоборот, имея несколько индексов для одной таблицы, с одним полем на индекс, не может быть много (или любая) справки для запросов, которые являются фильтрацией / сортировкой по нескольким полям.


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

Во-первых, обратите внимание, что первичный ключ обычно является индексом (в MSSQL, «кластеризованный индекс», на самом деле), но это не должно быть конкретно. Например, MSSQL PK по умолчанию является кластерным индексом; Кластенные индексы особенные в том, что они не являются отдельными данными, хранящимися в другом месте, но сама данные расположены в таблице в порядке кластеризованного индекса. Вот почему популярный PK является int Значение, которое автоматически генерируется с последовательным, увеличением значений. Таким образом, кластерный индекс сортирует данные в таблице специально по значению поля. Сравнить это с традиционным словарем; Сами записи заказываются «ключом», что является определенным словом.

Но в MSSQL (проверьте свою документацию по службе СУБД для вашей информации), вы можете изменить кластерный индекс, чтобы быть другим полем, если вам нравится. Иногда это делается на datetime на основе поля.


Полные текстовые индексы являются различными видами зверей полностью. Они используют некоторые из тех же принципов, но что они делают не совсем так же, как обычные показатели, которые я описываю. Также: в некоторых СУБД, LIKE Запросы делают нет Используйте полный текстовый индекс; Операторы специального запроса требуются.

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

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

Другие советы

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

Как выбрать и оптимизировать индексы Oracle?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top