В общем случае ... следует объединять таблицы (т. Е. Ассоциативные таблицы), которые должны быть созданы как индексированные таблицы (Oracle), кластерные индексы (SQL Server) .... или простые старые таблицы кучи (с отдельными индексами по 2 столбцам).Должны ли таблицы Join обычно создаваться как индексированные таблицы (кластерные индексы)?
На мой взгляд, если, преимущества:
улучшение скорости. Вы избегаете просмотра таблицы кучи.
Улучшение пространства. Вы полностью исключаете таблицу кучи, поэтому вы, вероятно, сохраняете ~ 30% пространства.
Недостатки:
Index Skip Scan (применяется только к Oracle) .. будет быстрее, чем полное сканирование таблицы, но медленнее, чем сканирование индекса. Таким образом, поиск во втором столбце составного ключа будет немного медленнее (Oracle), намного медленнее (MSSQL).
Сканирование полного индекса будет медленнее, чем сканирование полного стола - поэтому, если в большинстве случаев Оптимизатор затрат основан на использовании хэш-узлов (которые не используют преимущества индексов) ... вы можете ожидать ухудшения производительности. (Предполагая, что СУРБД не сначала фильтрует таблицы).
Это заставляет меня сомневаться в том, действительно ли нужны какие-либо индексы для таблиц Join, если вы преимущественно делаете Hash Joins.
У вас должен быть составной первичный ключ на 2 столбцах, которые в любом случае будут создавать уникальный индекс. –
reg «Полное сканирование индекса будет медленнее, чем сканирование полного стола»: у Oracle есть также INDEX FAST FULL SCAN, который в основном такой же быстрый, как полный доступ к таблице. См. Http://use-the-index-luke.com/sql/explain-plan/oracle/operations#index_fast_full_scan. См. Также мой комментарий reg. Hash Присоединяйтесь к индексированию ниже. –
@MarkusWinand - Хорошая точка ... Спасибо за отличный сайт (IMO это самый сжатый источник агностиков dbms по индексам онлайн). – vicsz