我正在尝试使用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个属性。
哪种方法好?
答案 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子句要好得多。