哪个查询更好,更有效 - mysql

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数据库

两者都很好,但我很纳闷

  1. 哪种情况适用于任何情况?
  2. 性能明智哪一个更好?(将数据库称为百万条记录)
  3. 一个优于另一个的任何优势?
  4. 有什么工具我可以检查哪个更好查询?

提前致谢

Cyr*_*don 10

1-这是一个没脑子的人,使用I型

2-类型II连接也称为"隐式连接",而类型I称为"显式连接".使用现代DBMS,普通查询不会出现任何性能问题.但我认为对于一些大型复杂的多连接查询,DBMS可能会遇到隐式连接问题.使用显式连接只能改善您的解释计划,因此结果更快!

3-因此,性能可能是一个问题,但最重要的是,可读性可以进一步提高维护性.显式连接准确解释了您想要在哪个字段上加入的内容,而如果您创建连接或过滤器则不会显示隐式连接.Where子句用于过滤,而不是用于连接!

对于显式连接而言,一个重要的一点:外连接对于隐式连接非常烦人.当您希望多次连接外连接时,显式连接是解决方案,这是很难阅读的.

4-执行计划是您所需要的(参见文档)

一些重复:

显式vs隐式SQL连接

SQL join:where子句与on子句

INNER JOIN ON vs WHERE子句