В моем учебнике для школы я видел, что многие операции соединения никогда не оптимизировали таблицу справа от соединения и только слева. Например, чтобы найти имя сотрудника, управляющего отделом базы данных, вы могли бы сделать это:
имя ( Mgr_ssn ( Dname = 'База данных' (департамент)) ⨝ Mgr_ssn = ПЛА Сотрудник)
Так мне интересно, если это будет одинаково правильно сделать что-то вроде:
имя ( Mgr_ssn ( Dname = 'База данных' (департамент)) ⨝ Mgr_ssn = ПЛА ( ssn, имя Сотрудник))
Это предполагает, что Employee имеет много других атрибутов. При этом я думаю, что система будет экономить время, не беспокоясь о присоединении ко всем другим атрибутам Employee, когда в конце концов они будут проецироваться в любом случае. Я никогда не видел такой проекции с правой стороны соединения раньше, и мне интересно, приемлемо ли это и/или нет.Оптимизация реляционной алгебры
ответ
Большинство оптимизаторов использует системный оптимизатор R, который рассматривает только левые глубинные соединения. Вот почему вы никогда не видите соединения справа.
Пространство поиска всех параметров экспоненциально, поэтому оптимизаторы хотят быстро найти приемлемые решения (оптимизаторы не находят лучшего решения, стараются избегать худших).
P.S. Причиной использования левого глубокого соединения является то, что он позволяет конвейерно обрабатывать результаты без необходимости записывать их на диск, что экономит операции ввода-вывода.
Любой надежный оптимизатор запросов будет сжимать соответствующие ограничения, а иногда и проекции, чтобы минимизировать обрабатываемые данные. И поскольку оптимизатор будет делать это автоматически, и результат будет идентичным, нет особой необходимости оптимизировать выражение в реляционной алгебре.
В последовательности объединения двух таблиц, как это, не ясно, что будет полезно сформировать проекцию перед присоединением к отделу; вероятная последовательность обработки найдет (возможно, один) отдел с Dname = 'Database', а затем найдет одну строку в Employee с E.SSN = D.Mgr_SSN. Однако, если подвыражение использовалось несколько раз, это может стоить того.
Я также отмечаю, что дизайн ужасен - вы никогда не должны использовать что-либо столь же чувствительное, как SSN, как поле соединения в дизайне базы данных. Команда PCI подойдет! Но, возможно, имена - похмелье из более мягких времен, давно прошедших, но контент является сгенерированным суррогатом, а реальный SSN хранится в Employee.RealSSN (который может даже быть зашифрован, чтобы гарантировать, что неавторизованный не видит его, хотя установка разрешений правильно в столбце, так что только санкционированный может выбрать его также эффективно).
- 1. Синтаксис реляционной алгебры
- 2. Запрос реляционной алгебры
- 3. Перевод реляционной алгебры деления
- 4. Операции реляционной алгебры
- 5. реляционной алгебры конкретных операции
- 6. Выражение реляционной алгебры для запросов
- 7. перевод реляционной алгебры на SQL
- 8. Преобразование SQL в реляционной алгебры
- 9. Перевести SQL заявление реляционной алгебры
- 10. MySQL для чтения реляционной алгебры?
- 11. Отдел реляционной алгебры sql-эквивалент
- 12. выражение реляционной алгебры для "is null"
- 13. Как решить следующий запрос реляционной алгебры
- 14. Дать следующий запрос с использованием реляционной алгебры
- 15. Поиск атрибутов с использованием реляционной алгебры
- 16. Языковые функции для реализации реляционной алгебры
- 17. операции реляционной алгебры: назначение и грейдер
- 18. Невозможно установить интерпретатор реляционной алгебры в Java
- 19. Является ли LOAD оператором реляционной алгебры?
- 20. Преобразование реляционной алгебры в соответствующий SQL-запрос
- 21. Является ли этот SQL-запрос эквивалентным этому выражению реляционной алгебры?
- 22. Пожалуйста, удалите эту путаницу относительно реляционной алгебры/кортежей исчисления
- 23. Максимальное различие между столбцами с использованием реляционной алгебры
- 24. Создание реляционной алгебры уравнений в образце базы данных
- 25. Как выразить предельный оператор в реляционной алгебре или расширенной реляционной алгебры
- 26. Как я могу найти количество обращений к диску, необходимых для запроса реляционной алгебры?
- 27. определение MAX с реляционной алгеброй?
- 28. Что нельзя выразить реляционной алгеброй?
- 29. Исправлена ошибка искробезопасности JDBC Оптимизация из реляционной базы данных
- 30. Может ли запрос sql возвращать другой результат, чем версия реляционной алгебры?
Оптимизаторы продвинулись с прототипа System R. –