Mysql
 sql >> база данни >  >> RDS >> Mysql

Има ли нещо нередно с присъединяванията, които не използват ключовата дума JOIN в SQL или MySQL?

Филтрирането се свързва единствено с помощта на WHERE може да бъде изключително неефективно в някои често срещани сценарии. Например:

SELECT * FROM people p, companies c 
    WHERE p.companyID = c.id AND p.firstName = 'Daniel'

Повечето бази данни ще изпълнят тази заявка доста буквално, като първо приемат декартовия продукт на people и companies таблици и след това филтриране по тези, които имат съвпадащ companyID и id полета. Въпреки че напълно неограниченият продукт не съществува никъде, освен в паметта и след това само за момент, изчисляването му отнема известно време.

По-добър подход е да групирате ограниченията с JOIN когато е уместно. Това е не само субективно по-лесно за четене, но и много по-ефективно. По този начин:

SELECT * FROM people p JOIN companies c ON p.companyID = c.id
    WHERE p.firstName = 'Daniel'

Това е малко по-дълго, но базата данни може да види ON клауза и я използвайте, за да изчислите напълно ограничения JOIN директно, вместо да започва с всичко и след това ограничаване. Това е по-бързо за изчисляване (особено при големи набори от данни и/или свързвания с много таблици) и изисква по-малко памет.

Променям всяка заявка, която виждам, която използва "запетая JOIN " синтаксис. Според мен единствената цел за съществуването му е сбитостта. Като се има предвид въздействието върху производителността, не мисля, че това е убедителна причина.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да защитим MySQL:Част първа

  2. Как да създадете база данни в MySQL

  3. Извличането на UTF-8 текст от MySQL в R връща ????

  4. SQL производителност UNION срещу ИЛИ

  5. Най-важните грешки, които трябва да избягвате при репликацията на MySQL