Я хотел бы обработать на мгновенной таблице или внутренней таблице оракула, превращая два или более значений в строку. - PullRequest
0 голосов
/ 26 октября 2011

Так как я японец, я плохо знаю английский.Пожалуйста, поймите ситуацию.

Существуют следующие обязательные требования.Это требование не подлежит изменению.

  • Я знаю только идентификатор из двух или более значений.
  • Это число превышает 500000.
  • Оно приобретается рано по низкой цене на 1время SQL.
  • Индекс создается по идентификатору и оптимизируется.

Следующие запросы SQL думают обо мне, превращая эти вещи в метод принятия в качестве условия поиска,

select * 
  from emp 
 where id in(1,5,7,8.....) 
    or id in(5000,5002....)

Он делит 1000 дел одновременно на «в» после того, как выше, где.

Однако обработка занимает больше времени в случае этого метода.В результате исследования многих вещей выяснилось, что это время обработки раньше, чтобы определить условия как «существует», а не иметь определенные условия как «в».Чтобы использовать «существует», вы должны запросить с помощью подзапроса.Тем не менее, он вызывает подзапросом хорошо, какой метод, или я не могу себе представить.

Кто-то должен научить хорошему методу.

Спасибо за внимание.

1 Ответ

0 голосов
/ 26 октября 2011

Если мое понимание верно, вы пытаетесь сделать это:

select * from emp where emp in (list of several thousand values)

Поскольку oracle поддерживает только списки из 1000 значений в этой конструкции, ваш код использует объединение.

Предлагаемое решение:

  1. Создать глобальную временную таблицу с полем id того же размера, что и emp.id
  2. Вставьте id: s, которые вы хотите найти в этой таблице
  3. Присоединяйтесь к этой таблице на ваш выбор

create global temporary table temp_id (id number) on commit delete rows;

Ваш выбранный код может быть заменен на:

<code to insert the emp.id:s you want to search for>
select * from emp inner join temp_id tmp on emp.id = temp_id.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...