Что происходит за кулисами, когда я создаю запрос, который работает с другими запросами в доступе? - PullRequest
2 голосов
/ 18 апреля 2011

Если у меня есть несколько запросов в Microsoft Access, которые я затем использую в другом новом запросе, выполняет ли доступ независимо, выполняет каждый из содержащихся в нем запросов и затем использует эти результаты в качестве новых таблиц в новом запросе, или он пытается объединить все подзапросы в новый отдельный запрос?

Например, скажем, у меня есть запрос, который возвращает teacherID и teacherName, затем у меня есть другой запрос, который возвращает studentID, teacherID и studentName. Затем я пытаюсь использовать оба этих запроса вместе в новом запросе, который делает что-то вроде

SELECT qryTeacher.teacherName, qryStudent.studentName 
FROM qryTeacher INNER JOIN qryStudent 
WHERE qryStudent.teacherID=qryTeacher.teacherID;

Выполнит ли это запрос qryTeacher и запрос qryStudent, а затем выполнит этот запрос по результатам или попытается создать какой-либо новый запрос, используя все три запроса?

Кроме того, имеет ли значение, является ли источник связанной таблицей SQL по сравнению с источником доступа .mdb?

1 Ответ

4 голосов
/ 18 апреля 2011

Если вы хотите узнать подробности о том, как ядро ​​базы данных обрабатывает ваши запросы, поищите в сети «Jet ShowPlan».

Все становится довольно сложным "под капотом".И даже один и тот же запрос не может выполняться одинаково дважды в строке.Например, с помощью новой обновленной статистики индекса планировщик запросов может определить более эффективный маршрут для получения запрошенных данных.

Более точно к точке вашего вопроса ... если вы создаете запрос, извлекающий данные издва других запроса, не предполагайте, что эти два выполняются отдельно перед объединением или передачей в третий.Это может произойти таким образом.Но оптимизатор примет решение о том, что он считает наиболее эффективным способом извлечения данных, и реорганизует план запросов по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...