哪个Oracle查询更快

时间:2018-11-24 15:08:51

标签: sql oracle performance query-performance

我正在尝试使用C#WPF视图显示员工属性。

我的数据库中'2'个不同的oracle表中有数据:

那些表结构是高级的...

  • Employee表(EMP)-列:

    ID, Name, Organisation
    
  • 员工属性表(EMPPR)-列

    ID, PropertyName, PropertyValue
    

用户将输入“雇员姓名列表”,我需要使用那些“ 2”表中的数据来显示雇员属性。

每位员工的属性范围为40-80,即EMPPR表中每位员工的40-80行。在这种情况下,哪种方法更有效?

方法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-使用一个查询获取ID列表,并在第二个查询中使用该ID获取属性

查询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>)

我需要一次检索大约1万名员工详细信息,每个员工拥有40-80个属性。

哪种方法好?

2 个答案:

答案 0 :(得分:2)

  

哪个查询更快?

第一个,它使用单个查询来获取结果。 为什么?从客户端到数据库服务器的来回查询消耗了很多时间,尤其是那些行大小适中的查询。

此外,构造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>)

答案 1 :(得分:0)

使用第一种方法在两个表之间进行联接,这比两次使用where子句要好得多。