Какой запрос Oracle быстрее - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь отобразить свойства сотрудника, используя C # WPF view.

У меня есть данные в '2' различных таблицах оракула в моей базе данных:

Структура этих таблиц на высоком уровне ...

  • Сотрудниктаблица (EMP) - столбцы:

    ID, Name, Organisation
    
  • Таблица свойств сотрудника (EMPPR) - столбцы

    ID, PropertyName, PropertyValue
    

пользователь введет «Список Имени Сотрудника», и мне нужно отобразить свойства Сотрудника, используя данные в этих таблицах «2».

Каждый сотрудник имеет свойства от 40-80, то есть 40-80 строк на сотрудника в EMPPRТаблица.В этом случае какой подход более эффективен?

Подход № 1 - извлечение данных из одного запроса:

SELECT Pr.PropertyName, Pr.PropertyValue
FROM EMP Emp, EMPPR Pr
WHERE Emp.ID = Pr.ID
  AND Emp.Name IN (<List of Names entered>)

Подход № 2 - получение списка идентификаторов с помощью одного запроса и получение свойств с использованием этого идентификатораво втором запросе

Запрос № 1:

SELECT ID
FROM EMP
WHERE Name IN (<List of Names entered>)

Query #2:

SELECT PropertyName, PropertyValue
FROM EMPPR
WHERE ID IN (<List of IDs got from Query#1>)

Мне нужно получить ~ 10K сведений о сотруднике сразу, где каждый сотрудник имеет 40-80 свойств.

Какой подходэто хорошо?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Использовать первый подход объединения двух таблиц, что гораздо лучше, чем использование условия where два раза.

0 голосов
/ 24 ноября 2018

Какой запрос быстрее?

Первый, который использует один запрос для получения ваших результатов.Зачем?большая часть запросов времени, особенно запросов с небольшими по размеру строками, расходуется при переходе от клиента к серверу базы данных и обратно.

Кроме того, конструкция WHERE something IN (val, val, val, val ... ... val) может выдать ошибку, если выслишком много значений.Таким образом, первый запрос является более надежным.

Совет для профессионалов: Приходите в 21-й век и используйте новый синтаксис JOIN.

 SELECT Pr.PropertyName, Pr.PropertyValue
   FROM EMP Emp
   JOIN EMPPR Pr ON Emp.ID = Pr.ID
  WHERE Emp.Name IN (<List of Names Inputted>)
...