gmh*_*mhk 7 mysql database database-design inner-join
我遇到了以不同的方式编写查询,如下面的Type-I所示
SELECT JS.JobseekerID
, JS.FirstName
, JS.LastName
, JS.Currency
, JS.AccountRegDate
, JS.LastUpdated
, JS.NoticePeriod
, JS.Availability
, C.CountryName
, S.SalaryAmount
, DD.DisciplineName
, DT.DegreeLevel
FROM Jobseekers JS
INNER
JOIN Countries C
ON JS.CountryID = C.CountryID
INNER
JOIN SalaryBracket S
ON JS.MinSalaryID = S.SalaryID
INNER
JOIN DegreeDisciplines DD
ON JS.DegreeDisciplineID = DD.DisciplineID
INNER
JOIN DegreeType DT
ON JS.DegreeTypeID = DT.DegreeTypeID
WHERE
JS.ShowCV = 'Yes'
Run Code Online (Sandbox Code Playgroud)
II型
SELECT JS.JobseekerID
, JS.FirstName
, JS.LastName
, JS.Currency
, JS.AccountRegDate
, JS.LastUpdated
, JS.NoticePeriod
, JS.Availability
, C.CountryName
, S.SalaryAmount
, DD.DisciplineName
, DT.DegreeLevel
FROM Jobseekers JS, Countries C, SalaryBracket S, DegreeDisciplines DD
, DegreeType DT
WHERE
JS.CountryID = C.CountryID
AND JS.MinSalaryID = S.SalaryID
AND JS.DegreeDisciplineID = DD.DisciplineID
AND JS.DegreeTypeID = DT.DegreeTypeID
AND JS.ShowCV = 'Yes'
Run Code Online (Sandbox Code Playgroud)
我正在使用Mysql数据库
两者都很好,但我很纳闷
提前致谢
Cyr*_*don 10
1-这是一个没脑子的人,使用I型
2-类型II连接也称为"隐式连接",而类型I称为"显式连接".使用现代DBMS,普通查询不会出现任何性能问题.但我认为对于一些大型复杂的多连接查询,DBMS可能会遇到隐式连接问题.使用显式连接只能改善您的解释计划,因此结果更快!
3-因此,性能可能是一个问题,但最重要的是,可读性可以进一步提高维护性.显式连接准确解释了您想要在哪个字段上加入的内容,而如果您创建连接或过滤器则不会显示隐式连接.Where子句用于过滤,而不是用于连接!
对于显式连接而言,一个重要的一点:外连接对于隐式连接非常烦人.当您希望多次连接外连接时,显式连接是解决方案,这是很难阅读的.
4-执行计划是您所需要的(参见文档)
一些重复: