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

Форум MySQL

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

 

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

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

тема: оптимальность в запросе
 
 автор: Амбер   (21.07.2010 в 00:23)   письмо автору
 
 

Всем привет!

Есть к примеру такая выборка

SELECT * from table1, table2, table4, table4 ...

и аналогичная (делают они то же самое)

SELECT * from table1 
LEFT JOIN table2
LEFT JOIN table3
LEFT JOIN table4 ...


Какая из них пооптимальней по потреблению ресурсов.

В первом как я понимаю создается сумарная времення таблица из количества строк count(table1) умножить на count(table2) и уже там сопоставляется по условиям. Как посчитать размер временной таблицы?

а во втором случае создается ли временная таблица? и где почитать об этом

Спасибо!

  Ответить  
 
 автор: Trianon   (21.07.2010 в 01:20)   письмо автору
 
   для: Амбер   (21.07.2010 в 00:23)
 

>Есть к примеру такая выборка ...
>...и уже там сопоставляется по условиям.

В приведеных примерах нет ни одного условия.
Во втором варианте временная таблица будет даже несколько больше так как учитывает варианты несуществования строк второй и далее таблиц.
С другой стороны, если условий все равно нет, в общем-то и таблицу временную создавать смысла нет - знай гони себе вложенные циклы по строкам каждой из таблиц...

  Ответить  
 
 автор: Импекс   (21.07.2010 в 08:44)   письмо автору
 
   для: Trianon   (21.07.2010 в 01:20)
 

или такой пример:

SELECT DISTINCT kirm.name as kirm,fira.znk as znak,kirm.x as x,kirm.y as y,kirm.id as fid,adress,email,url,home,telefon  
FROM uto,r_t,kirm
 WHERE kirm.id=uto.id_firm and r_t.id_tovar=uto.id and kirm.registr=1  
 and id_rubrik IN (SELECT id FROM gr_new WHERE
           id_parent IN (SELECT id_parent FROM gr_new WHERE id=".intval($_GET['id']).") 
ORDER by fname asc


или

SELECT DISTINCT kirm.name as fna,fira.znk as znak,kirm.x as x,kirm.y as y,kirm.id as fid,adress,email,url,home,telefon  
FROM uto
какой_то JOIN r_t ON r_t.id_tovar=uto.id
какой_то JOIN kirm ON kirm.id=uto.id_firm
INNER JOIN 
 (SELECT g1.id FROM gr_new g1 
 INNER JOIN gr_new g2 on g1.id=g2.id_parent 
 WHERE g2.id=".intval($_GET['id']).") 
 t0 ON t0.id=одна_из_таблиц.id_rubrik
WHERE kirm.registr=1  
ORDER by fname asc

  Ответить  
Rambler's Top100
вверх

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