П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 176134 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 72935 раз(а).

Учебник HTML.
Просмотров 72674 раз(а).

Руководство по PHP5.
Просмотров 43434 раз(а).

Хостинг через призму DNS.
Просмотров 49985 раз(а).

Подборка текстов стандартных документов.
Просмотров 43667 раз(а).

Учебник PHP - Самоучитель
Просмотров 49981 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 50340 раз(а).

Внешние атаки...
Просмотров 40759 раз(а).

Учебник PHP.
Просмотров 35875 раз(а).

SSI в примерах.
Просмотров 26967 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь




Глава 5. Оптимизация в MySQL
Пред.     След.

5.2. Оптимизация SELECT и других запросов
5.2.6. Как MySQL оптимизирует LEFT JOIN и RIGHT JOIN

Выражение "A LEFT JOIN B" в MySQL реализовано следующим образом:

  • Таблица B устанавливается как зависимая от таблицы A и от всех таблиц, от которых зависит A.

  • Таблица A устанавливается как зависимая ото всех таблиц (кроме B), которые используются в условии LEFT JOIN.

  • Все условия LEFT JOIN перемещаются в предложение WHERE.

  • Выполняются все стандартные способы оптимизации соединения, за исключением того, что таблица всегда читается после всех таблиц, от которых она зависит. Если имеется циклическая зависимость, MySQL выдаст ошибку.

  • Выполняются все стандартные способы оптимизации WHERE.

  • Если в таблице A имеется строка, соответствующая выражению WHERE, но в таблице B ни одна строка не удовлетворяет условию LEFT JOIN, генерируется дополнительная строка B, в которой все значения столбцов устанавливаются в NULL.

  • Если LEFT JOIN используется для поиска тех строк, которые отсутствуют в некоторой таблице, и в предложении WHERE выполняется следующая проверка: column_name IS NULL, где column_name - столбец, который объявлен как NOT NULL, MySQL пререстанет искать строки (для отдельной комбинации ключа) после того, как найдет строку, соответствующую условию LEFT JOIN.

RIGHT JOIN реализован аналогично LEFT JOIN.

При указании жесткого порядка чтения таблиц в LEFT JOIN и STRAIGHT JOIN оптимизатор связей (который определяет, в каком порядке таблицы должны быть связаны) будет выполнять работу намного быстрее, так как ему потребуется проверять меньшее количество перестановок таблиц.

Обратите внимание: отсюда следует, что если выполняется запрос типа

SELECT * FROM a,b LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key)
 WHERE b.key=d.key

MySQL будет делать полный просмотр таблицы b, поскольку LEFT JOIN заставит его читать эту таблицу перед d.

В этом случае, чтобы предотвратить полный просмотр таблицы b, нужно изменить запрос таким образом:

SELECT * FROM b,a LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key)
 WHERE b.key=d.key

Назад Начало Главы Начало Раздела Вперед

Пред. Глава След. Глава
Глава 4. Администрирование баз данных Начало Книги Глава 6. Справочник по языку MySQL


Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru