2012-05-31 3 views
1

У нас есть пара таблиц, большинство наших запросов используют только несколько объединений, так, другими словами, у нас есть что-то вроде 2-3 объединений, которые почти каждый запрос использует. Каковы наиболее распространенные способы ускорения этого общего объединения, если таблицы становятся все больше? Мы хотели бы использовать SQL Server или Oracle.Общие соединения нескольких таблиц

+1

Подумайте о индексации. –

+0

Подождите, у вас есть несколько запросов в SQL Server или Oracle, которые медленны? –

+0

@ Аарон Да, они не так быстро, почему? – Cartesius00

ответ

1

Наиболее распространенным методом является индексирование, но вы не предоставляете достаточно информации, чтобы быть более конкретным.

Вот несколько сценариев:

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

В этом случае вы хотите определить первичный ключ автоинкремента в справочных таблицах. Это автоматически функционирует как индекс.

(2) Ваши запросы высоко селективный

В этом случае, вы хотите, чтобы сосредоточиться индексом на полях в ИНЕКЕ. Это особенно верно, когда вторая таблица довольно мала, поэтому последовательный поиск похож на поиск индекса.

(3) Ваши соединенные таблицы действительно являются узким местом

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

(4) У вас есть и другие варианты, такие как разбиение данных.

1

Некоторые опции

  • Lay индексы на тэ колонке вы присоединитесь на
  • сделать индексы, чтобы они покрывают данные вы после
  • Denonormalise данных делать стыки не нужны < = наибольшая победа
  • использовать индексированные представления в SQL Server или материализованные представления в Oracle
  • Убедитесь, что вы предоставили запрос Оптимизатор - лучшая статистика, которую он может получить, поэтому использует оптимальную стратегию объединения (хеш/слияние/цикл)
2
  1. материализованные виды - oracle поддерживает их, и они полезны в некоторых случаях, особенно. когда есть много сообщений, а не записи: http://docs.oracle.com/cd/B10501_01/server.920/a96520/mv.htm

  2. указание - проанализировать/объяснить планы запросов и посмотреть, поможет ли добавление индекса. Очень часто вы можете улучшить скорость, имея разные индикаторы для разных запросов. Вы также можете дать подсказки, чтобы сообщить парсеру запроса, который индекс используется для конкретного запроса.

  3. denormalization - хранить некоторые данные из этих таблиц в связанных таблицах, а не присоединяться для их получения.

  4. кеширование - увеличение размера кеша запросов или создание слоя кеширования в приложении.

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