Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос по оптимизации многотабличных запросов
 
 автор: dmtrfoxerr   (05.01.2008 в 21:15)   письмо автору
 
 

Есть сводная таблица masina , в которую заливается информация с других таблиц


$query = "SELECT            mashina.*,
                         model.*,
                         yearpoduct*,
                         ........
                         optika.*
                        FROM mashina, model,yearproduct, ...., optika WHERE
                                                      mashina.id_model=model.id_model  AND
mashina.id_yearproduct=yearproduct.id_yearproduct AND
............                                                      masina.id_optika=optika.id_optika";


Подскажите как можно оптимально оптимизировать запрос чтоб увеличить скорость обработки...( или может лучше чтоб в сводную таблицу вместо id с других таблиц вставлять значения????)
PS... Если в таблице какой нить id = 0(например id_optika) ... тогда эта строка не отображается... а при замене AND на OR ... запрос "зависает".
Заранее благодарен.

   
 
 автор: Trianon   (05.01.2008 в 21:42)   письмо автору
 
   для: dmtrfoxerr   (05.01.2008 в 21:15)
 

Вам нужно использовать не внутренние, а левосторонние внешние соединения.

SELECT         mashina.*,
                model.*,
                 yearpoduct.*,
                  optika.*
  FROM mashina 
   LEFT JOIN model ON mashina.id_model=model.id_model
    LEFT JOIN yearproduct ON mashina.id_yearproduct=yearproduct.id_yearproduct
     LEFT JOIN optika ON masina.id_optika=optika.id_optika


Тогда основа (mashina) будет выводиться независимо от того, есть ли данные в сопутствующих таблицах.

Что до оптимизации - расставляйте индексы на поля ключей (id-ов)
Впрочем, по идее, для такого запроса будет достаточно первичных ключей, которые обычно поставлены вместе с auto_increment

   
 
 автор: dmtrfoxerr   (05.01.2008 в 23:24)   письмо автору
 
   для: Trianon   (05.01.2008 в 21:42)
 

Спасибо за помощь!!! ))
Хотел бы уточнить ... а насколько такой запрос "шустрый" ...
И на сколько увеличит производительность индексы полей ....
Ведь увеличится размер таблиц в несколько раз.
Спасибо еще раз!!!

   
 
 автор: Trianon   (06.01.2008 в 01:30)   письмо автору
 
   для: dmtrfoxerr   (05.01.2008 в 23:24)
 

вот заодно и выясните.
Повторю. Именно для этого запроса (без поиска, фильтров и сортировок) никаких других индексов, кроме первичных ключей, не требуется.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования