Оставленное внешнее объединение по проблеме производительности на два столбца

Не используйте значение с ngModel, сначала удалите его,

  <input id="userInfoEmail" type="text" class="form-control" [(ngModel)]="userInfo.email" disabled>

, теперь вы сможете получить доступ к значению в контроллере, например,

console.log(this.userInfo.email);

, тогда как userInfo должен защищать вверху, как,

userInfo: any = {}; , если у вас есть тип изменить любой с типом

11
задан Jason Baker 15 January 2009 в 14:21
поделиться

6 ответов

Примите во внимание, что операторы 2 и 3 отличаются от первого.

Как? Ну, Вы делаете левое внешнее объединение, и Ваш оператор Where не принимает это во внимание (как НА пункте, делает). Как минимум попробуйте:

SELECT col1, col2
FROM table1, table2
WHERE table1.person_uid = table2.person_uid (+)
AND table1.period = table2.period (+)

и посмотрите, получаете ли Вы ту же проблему производительности.

Какие индексы Вы имеете на этих таблицах? Эти отношения определяются ограничением внешнего ключа?

То, в чем Вы, вероятно, нуждаетесь, является сводным индексом и на person_uid и на период (на обеих таблицах).

16
ответ дан 3 December 2019 в 02:30
поделиться

Я думаю, что необходимо понять, почему последние два не являются тем же запросом как первый. Если Вы делаете левое соединение и затем добавляете, где пункт referncing поле в таблице на правой стороне соединения (то, которое не может всегда иметь записи для соответствия первой таблице), то Вы эффективно изменили соединение на внутреннее объединение. Существует одно исключение к этому, и это - то, при ссылке на что-то как

SELECT col1, col2
FROM table1
LEFT OUTER JOIN table2
ON table1.person_uid = table2.person_uid
WHERE table2.person_uid is null

В этом случае Вы просящий запись, которые не имеют записи во второй таблице. Но кроме этого особого случая, Вы изменяетесь, левые соединяют с внутренним объединением, если Вы повторно ограждаете поле в table2 в где пункт.

Если бы Ваш запрос не достаточно быстр, я посмотрел бы на Вашу индексацию.

5
ответ дан 3 December 2019 в 02:30
поделиться

Что-либо, что любой говорит Вам на основе информации, которую Вы предоставили, является предположением.

Посмотрите на план выполнения относительно запроса. Если Вы не видите оснований для замедления в плане, сообщении план здесь.

http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/ex_plan.htm#PFGRF009

4
ответ дан 3 December 2019 в 02:30
поделиться

У Вас есть закрывающие индексы на person_uid и period для обеих таблиц?

В противном случае добавьте их и попробуйте еще раз.

Смотрите на план выполнения и посмотрите то, что на самом деле делает запрос.

Также: Каковы типы данных полей? Действительно ли они - то же в обеих таблицах? Неявный бросок может действительно замедлить вещи.

3
ответ дан 3 December 2019 в 02:30
поделиться

Эти таблицы имеют индексы на столбцах, к которым Вы присоединяетесь? Установите свободный продукт Oracle SQLDeveloper и используйте его, чтобы сделать "объяснение" на том запросе и видеть, делает ли он последовательные сканирования обеих таблиц.

2
ответ дан 3 December 2019 в 02:30
поделиться

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

Мое лучшее предположение, не видя план выполнения, то, что первый запрос (единственный, который, кажется, корректен) имеет к сканированию таблицы table2, а также table1.

Поскольку Вы говорите, что не можете изменить индексы, необходимо изменить запрос. Насколько я могу сказать, существует только одна реалистическая альтернатива...

SELECT
   col1, col2
FROM
   table2
FULL OUTER JOIN
   table1
      ON table1.person_uid = table2.person_uid
      AND table1.period = table2.period
WHERE
   table1.person_uid IS NOT NULL

Надежда здесь состоит в том, что Вы сканируете table2 для каждой уникальной комбинации (person_uid, период), но используете индексы на table1. (В противоположность сканированию table1 и использование индексов на table2, который, что я ожидал от Вашего запроса.)

Если table1 не будет иметь соответствующих индексов, однако, то Вы очень вряд ли будете видеть любое повышение производительности вообще...

Демократы.

2
ответ дан 3 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: