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

我遇到了以不同方式编写查询,如下所示
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'

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'

我正在使用Mysql数据库

两者都很好,但我很纳闷

>对于任何情况,这是最佳实践?
>性能明智哪个更好?(将数据库称为数百万条记录)
>一个优于另一个的任何优势?
>有什么工具可以检查哪个更好查询?

提前致谢

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

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

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

对于显式连接来说,一个重要的一点:外连接对于隐式连接非常烦人.当您想要使用外连接进行多次连接时,显式连接是解决方案时很难阅读.

4-执行计划是你需要的(See the doc)

一些重复:

Explicit vs implicit SQL joins

SQL join: where clause vs. on clause

INNER JOIN ON vs WHERE clause

相关文章
相关标签/搜索