2012-04-04 5 views
0

Можно создать дубликат:
Explicit vs implicit SQL joins
In MySQL queries, why use join instead of where?Что такое разница в присоединиться присоединиться к ключевому слову или присоединиться =

Запрос с оператором =: -

Select us.FirstName 
     ,uf.FileTitle 
     ,pq.Question 
     ,pa.Answer from 
UserMst us,UploadedFile uf,PollQuestion pq,PollAnswer pa,PollResult pr 
where us.UserId = pr.U_id 
     and uf.FileId=pr.A_id 
     and pq.Q_id=pr.Q_id 
     and pa.A_id=pr.ans_id 

Запрос с ключевым словом Join: -

Select us.FirstName,uf.FileTitle ,pq.Question,pa.Answer from 
    PollResult pr join UserMst us on us.UserId = pr.U_id 
      join UploadedFile uf on uf.FileId = pr.A_id 
      join PollQuestion pq on pq.Q_id= pr.Q_id 
      join PollAnswer pa on pa.A_id =pr.ans_id 

Какой из них лучше в исполнении?

+0

Или [ВЗАИМОДЕЙСТВИЕ НА ПОЛОЖЕНИЕ vs WHERE] (http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause) – bhamby

+0

неявная область объединений SQL antipattern см. http: //www.amazon.com/gp/product/1934356557/ref=kinw_rke_tl_1 – HLGEM

ответ

1

В SQL 2008 это практически не имеет значения. (Хотя я считаю, что прежний метод может быть устаревшим?)

Однако во многих реализациях SQL, если каждое соединение имеет условие, последующее соединение будет объединяться с меньшим количеством значений и, следовательно, быть немного быстрее.

Если вы положите все свои условия в конце, то эта оптимизация не произойдет до конца. Итак, вы получите массивный список строк, которые будут фильтроваться за один раз, что теоретически будет медленнее.

Так, например:

Если таблица А имеет 1000 строк, и вы присоединяетесь к другому столу, B, с 1000 строк, но указать ИНТ а условие соединения, что вы только соединяющую до 10 строк в B , у вас есть 10 строк. Если вы затем присоединитесь к таблице C, вы будете только 10 строк.

Если вы присоединитесь к B к C затем процеживают, вы фильтрации 1000 строк (или может быть 1,000,000 в зависимости от объединения)

Так для перекрестной совместимости реализации, а также читаемость, это могло бы быть лучше для использования последней версии.

0

Я предпочитаю присоединиться. Я думаю, что имеет смысл иметь привычку всегда ставить условие соединения в предложение ON (если это не внешнее соединение, а вы действительно хотите его в предложении where), поскольку оно упрощает тем, кто читает ваш запрос, какие условия объединяются в таблицы, а также помогает предотвратить предложение WHERE из десятков строк. потому что его чистый

Смежные вопросы