我有一个这样的要求,它应该连接两个表,一个表中有超过100k条记录,而另一个表中只有5条记录,如下所示
Employee Dept Result
id Name deptid deptid Name Name deptid Name
1 Jane 1 1 Science Jane 1 Science
2 Jack 2 2 Maths Dane 1 Science
3 Dane 1 3 Biology Jack 2 Maths
4 Drack 3 4 Social Drack 3 Biology
5 Drim 5 Zoology Kery 4 Social
6 Drum 5 Drum 5 Zoology
7 Krack
8 Kery 4
.
.
100k需要使用哪个连接来以更好的方式获取查询,以获得如下所示的结果。我只想让查询与employee表中的其他表连接,该表具有dept,我在下面的查询中想到了这一点,但我想知道是否有更好的方法来做这件事。
Select e.name,d.deptid,d.Name from
(Select deptid,Name from Employee where deptid IS NOT NULL) A
and dept d where A.deptid=d.deptid;发布于 2015-06-26 03:10:39
首先,我不确定为什么要以这种方式执行查询。应该更像是
SELECT A.name, D.deptid,D.Name
FROM Employee A
INNER JOIN dept D
ON A.deptid = D.deptid不需要IS NOT NULL语句。
如果这是一次性连接或偶发的,并且性能是关键(不是数据库中的永久查询),则可以完全省略连接,而使用CASE进行连接
SELECT
A.name, A.deptid,
CASE
WHEN A.deptid = 1 THEN "Science"
WHEN A.deptid = 2 THEN "Maths"
...[etc for the other 3 departments]...
END as Name
FROM Employee A如果这是permanent,并且performance是关键字,那么只需尝试对Employee表中的外键deptid应用索引,并使用上面的第一个查询。
https://stackoverflow.com/questions/31058621
复制相似问题