Присоединяйтесь к вопросу, каковы лучшие альтернативы? - PullRequest
2 голосов
/ 19 мая 2011

Q:

У меня есть 5 или 6 таблиц, и мне нужны данные из этих таблиц: я делаю следующий оператор соединения для выполнения моего запроса.

SELECT d.batch_no,d.studytype_code,d.camp_code,d.dep_code,d.start_date,d.end_date,a.year,a.term_code,c.studytype_name ,e.dep_name_ar,f.camp_name_ar
FROM llkbatch a , llkbatch_category b , mm19studytype c ,llkbatch_exception d  ,llkdepartment e,llkcamp f
WHERE   a.batch_no = b.batch_no
AND  b.studytype_code = c.studytype_code 
AND  b.batch_no = d.batch_no
AND b.studytype_code = d.studytype_code 
AND d.dep_code = e.dep_code
AND d.camp_code = f.camp_code

но я думаю, чтоjoin иногда является менее эффективным способом сделать подобные вещи, есть ли альтернатива этому в programming way или database layer, я имею в виду альтернативы объединениям в общем, и когда я должен уходить от объединений.большое спасибо.

Ответы [ 2 ]

3 голосов
/ 19 мая 2011

Существует более современный синтаксис соединений ANSI, который сделает ваши объединения более читабельными, но это не должно влиять на производительность:

SELECT d.batch_no,d.studytype_code,d.camp_code,d.dep_code,d.start_date,d.end_date,
       a.year,a.term_code,c.studytype_name ,e.dep_name_ar,f.camp_name_ar
FROM ra1batch a 
JOIN ra1batch_category b ON a.batch_no = b.batch_no
JOIN ra1studytype c ON b.studytype_code = c.studytype_code
JOIN ra1batch_exception d ON b.batch_no = d.batch_no
                         AND b.studytype_code = d.studytype_code 
JOIN rr1department e ON d.dep_code = e.dep_code
JOIN rr2camp f ON d.camp_code = f.camp_code
2 голосов
/ 19 мая 2011

Запрос, который вы написали в своем вопросе, соответствует синтаксису Oracle. Но вы используете объединения, как если бы вы использовали SQL Server. Это даст вам лучшую производительность по сравнению с вашим текущим запросом.

Приведенный ниже запрос будет проанализирован быстрее по сравнению с вашим текущим запросом.

SELECT d.batch_no, d.studytype_code, d.camp_code, …
FROM ra1batch a
INNER JOIN ra1batch_category b on a.batch_no = b.batch_no
...