Я не очень знаком с базами данных, и теперь я пытаюсь понять механизм индексации.
Насколько я знаю, в СУБД индексация по столбцу ускоряет поиск по этому столбцу. Это также верно для тройных магазинов, только там индексы предполагают, что вы будете искать (например) в основном по теме, затем по объекту и так далее.
Я не уверен насчет СУБД, но в тройных хранилищах вы можете определить более одного индекса, позволяя магазину выбирать лучший индекс для каждого запроса (надеюсь, я правильно понял). Естественно, возникает следующий вопрос:
Почему бы мне не добавить все возможные индексы в тройное хранилище и не распространяться на СУБД, почему бы не создавать индексы для каждого столбца (если я не слишком ленив)?
Размещайте индексы только при необходимости. Как правило, при разработке схемы базы данных каждая таблица получает кластерный индекс первичного ключа PK для начала. Это будет уникальный идентификатор данных в этой таблице. В может быть по 1 столбцу или много.
После этого я обычно просто добавляю некластеризованные уникальные индексы в столбцы, для которых я хочу обеспечить уникальность.
Это базовая схема. По мере развития и совершенствования приложения мы добавляем индексы по мере необходимости, исходя из проблем производительности и того, как мы запрашиваем данные.
Каждый добавленный индекс увеличивает используемый интервал, а также добавляет дополнительное обслуживание. Так что выбирайте свои индексы с умом.
источник
Преимущество индексов заключается в том, что они 1) представляют собой структуру данных, которую можно быстро найти, и 2) более компактны, чем фактические таблицы, что позволяет большему количеству индекса помещаться в память, а не переноситься на диск.
Если у вас есть индекс для каждого столбца, то сами индексы займут больше места, чем таблица, которую они представляют. Если база данных действительно использует все индексы, ей потребуется больше времени, чтобы просто поменять их местами в памяти и из памяти. Кроме того, каждый индекс должен быть обновлен при инертном, обновлении или удалении.
Кроме того, индексы для одного столбца - даже не лучшее, что вы можете сделать. Большинство реляционных баз данных фактически позволяют индексировать несколько столбцов, и порядок этих столбцов имеет значение. Например, если я хочу найти в базе данных всех людей, которые ходили в Duke с уроков в период с 1980 по 1984 год, то мне нужен индекс (School, ClassYear). Запрос не сможет использовать индекс с такими же столбцами, но обратный.
Таким образом, чтобы создать все возможные индексы, существует не менее n! способы размещения столбцов в индексе. Имея только 5 столбцов, существует 120 возможных индексов.
Поскольку существует так много возможных индексов, вам действительно нужно определить, какие индексы полезны для вашего приложения, и создать только те.
источник
Создание индекса для каждого столбца в таблице обычно является пустой тратой пространства, и, как уже упоминали другие, это может замедлить операции вставки / обновления. Индекс используется для ускорения запросов. Я бы рекомендовал добавлять индекс к столбцу только в том случае, если вы замечаете низкую производительность при запросе значений в этом столбце.
В некоторых базах данных может потребоваться индекс для первичного ключа таблицы, поэтому у вас может не быть выбора. Кроме того, если у вас очень большие текстовые столбцы, существуют специальные технологии, предназначенные для полнотекстового поиска и индексации, но они не всегда совпадают с типом индекса, который вы используете для небольшого числового столбца.
источник