У меня есть две таблицы, которые выглядят следующим образом:Oracle оптимизация схемы для 1: 0..1 отношений
table A: FieldID NUMBER (PK), other non-relevant fields
table B: FieldID NUMBER (PK/FK), other non-relevant fields
Таблицы отображающую 1: отношения 0..1. В частности, после того, как новая строка будет вставлена в таблицу A, в какой-то момент в будущей таблице B будут заполнены дополнительные данные.
Этот проект изначально был предпочтен уникальной расширенной таблице, поэтому везде, где есть поля, не допускающие обнуления (поскольку нет возможности предсказать, когда будет заполняться часть данных «B»).
Теперь ... Выполнение выбора соединения из A и B удивительно ужасно. Мы говорим о нескольких 100k строках в обеих таблицах, и все же внутреннее соединение simpe занимает огромное количество времени для завершения.
Помимо перемещения полей из B в A (вещь, которую я бы предпочел не делать, чтобы избежать дополнительных «нулевых» проверок), как я могу улучшить свои выступления?
Определить «ужасный», в частности это для одиночных запросов PK или ПОЛНОГО ТАБЛИЦЫ СКАНИРОВАНИЯ? –
Привет, это для поиска PK. Если я сделаю (например), выберите * из A, B, где A.FieldID = B.FieldID и rownum <= 10, для завершения требуется ~ 20 секунд. – Andrea
Пожалуйста, опубликуйте план объяснения. [Отслеживание запроса] (http://docs.oracle.com/cd/E11882_01/server.112/e16638/sqltrace.htm#PFGRF01020) также может помочь понять, почему требуется столько времени. –