Этот сайт не наркоманов. Это сайт программистов.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 25 Май, 2012, 03:56:54

Страниц: [1]
Печать
Автор Тема: Риторический вопрос про вложенные запросы  (Прочитано 165 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
TRIAL    ↓ 
14 Сентябрь, 2011, 10:54:48
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 7
Сообщений: 907
Сила слова: 0.77

Столкнулся с такой интересной вещью: был запрос
SQL
SELECT `id`, `nick`, `avatar` FROM `user` WHERE `id` IN (SELECT DISTINCT `from` FROM `message` WHERE `to` = '1' AND `type` = '0')
В таблице `message` около 7к записей. Данный запрос извлекал десяток.
На выполнение этого запроса ушла 21 сек !!!.
 
Переписал следующим образом:
PHP
$res = mysql_query("SELECT DISTINCT `from` FROM `message` WHERE `to` = '".$_SESSION['user']['id']."' AND `type` = '0'");
while($rs = mysql_fetch_assoc($res)) {
   
    $from_a[] = $rs['from'];
}
 
$res = mysql_query("SELECT `id`, `nick`, `avatar` FROM `user` WHERE `id` IN (".implode(", ", $from_a).")");
Это дело выполнилось за 0.02 где-то. Проще говоря моментально.
 
В связи с этим встал вопрос, стоит ли использовать вложенные запросы и, самое главное, почему такая огромная разница в производительности!?!
Записан

from TRIAL with LOVE
phpdude    ↓ 
14 Сентябрь, 2011, 10:59:11 , спустя 4 минуты 23 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20790
Сила слова: 1.66

В связи с этим встал вопрос, стоит ли использовать вложенные запросы и, самое главное, почему такая огромная разница в производительности!?!
потому что был foreach * foreac. а стало 2 * foreach. используй индексы и все будет ок. в первой таблице я так понимаю что ID - первичный ключ, тогда во второй таблице проставь from - индекс. и повтори первый запрос. удивишься как быстро все сработает :)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
TRIAL    ↓ 
14 Сентябрь, 2011, 11:05:52 , спустя 6 минут 41 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 7
Сообщений: 907
Сила слова: 0.77

Нихрена не понял ) Можешь написать как это дело по-человечески должно выглядеть на моем примере? :)
Записан

from TRIAL with LOVE
phpdude    ↓ 
14 Сентябрь, 2011, 11:13:54 , спустя 8 минут 2 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66


Нихрена не понял ) Можешь написать как это дело по-человечески должно выглядеть на моем примере? :)
в твоем примере все нормально.
 
только не хватает смежного индекса на второй таблице по выбираемым полям.
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
AlexB    ↓ 
14 Сентябрь, 2011, 11:31:03 , спустя 17 минут 9 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3427
Сила слова: 2.6

TRIAL, открой для себя EXPLAIN и JOIN
Записан

TRIAL    ↓ 
14 Сентябрь, 2011, 11:40:00 , спустя 8 минут 57 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Джедаи

Карма: 7
Сообщений: 907
Сила слова: 0.77

Да давно открыть пора. А то я за все эти годы по MySQL ни одного учебника не прочитал. По этому для меня все эти JOINы и прочая фигня - темный лес.
phpdude, кажись понял что ты имеешь ввиду. Ладно, время будет попробую еще по шаманить, а пока так оставлю )
Записан

from TRIAL with LOVE
AlexB    ↓ 
14 Сентябрь, 2011, 11:56:53 , спустя 16 минут 53 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3427
Сила слова: 2.6


Да давно открыть пора. А то я за все эти годы по MySQL ни одного учебника не прочитал. По этому для меня все эти JOINы и прочая фигня - темный лес.
phpdude, кажись понял что ты имеешь ввиду. Ладно, время будет попробую еще по шаманить, а пока так оставлю )
Хули оставлять и плодить говнокод.
Перепиши запрос на JOIN и отладь с помощью EXPLAIN, делов на 3 минуты ...
Записан

KaFe    ↓ 
14 Сентябрь, 2011, 01:32:16 , спустя 1 час 35 минут 23 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Сраный Тролль

Карма: -13346
Сообщений: 1727
Сила слова: -772.79

Перепиши запрос на JOIN
+1
Записан

phpdude    ↓ 
14 Сентябрь, 2011, 01:42:39 , спустя 10 минут 23 секунды
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66


Перепиши запрос на JOIN
+1
вообще похуй. оптимизатор все равно жойн из where in сделает. скорости это не прибавит и не убавит.
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
AlexB    ↓ 
14 Сентябрь, 2011, 02:02:07 , спустя 19 минут 28 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3427
Сила слова: 2.6


вообще похуй. оптимизатор все равно жойн из where in сделает. скорости это не прибавит и не убавит.
да вот не факт, сталкивался что оптимизатор лажается на таких вещах и вложенный запрос исполняется много раз
с тех пор вообще перестал использовать вложенные запросы без крайней необходимости
 
в общем, EXPLAIN обо всем раскажет ...
« Последнее редактирование: 14 Сентябрь, 2011, 02:00:52 от AlexB » Записан

phpdude    ↓ 
14 Сентябрь, 2011, 02:02:02 , спустя
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66

в общем, EXPLAIN обо всем раскажет ...
это факт .... тут не поспоришь)
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Страниц: [1]
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd