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

  • Автор темы HollySpirut
  • Дата начала
Статус
В этой теме нельзя размещать новые ответы.

HollySpirut

Guest
Оптимизация выборки за все время, месяц, неделю

За все время
$vsego=mysql_result( @mysql_query("SELECT COUNT(*) FROM db"), 0, 0 );
$dnei=mysql_num_rows( @mysql_query("SELECT * FROM db GROUP BY TO_DAYS(date)"));

За месяц
$vsego=mysql_result( @mysql_query("SELECT COUNT(*) FROM db WHERE TO_DAYS(NOW()) - TO_DAYS(date) <= 30"), 0, 0 );
$dnei=mysql_num_rows( @mysql_query("SELECT * FROM db WHERE TO_DAYS(NOW()) - TO_DAYS(date) <= 30 GROUP BY TO_DAYS(date)"));

За неделю
$vsego=mysql_result( @mysql_query("SELECT COUNT(*) FROM db WHERE TO_DAYS(NOW()) - TO_DAYS(date) <= 7"), 0, 0 );
$dnei=mysql_num_rows( @mysql_query("SELECT * FROM db WHERE TO_DAYS(NOW()) - TO_DAYS(date) <= 7 GROUP BY TO_DAYS(date)"));


Как оптимизировать?
 

Фанат

oncle terrible
Команда форума
зачем?

-~{}~ 02.04.06 13:41:

для начала напиши функцию
my_result($query) {
$res=mysql_query($query);
$row=mysql_fetch_row($res);
return $row[0];
}
и избавься от того чудовищного кода, которым ты пользуешься.
 

HollySpirut

Guest
1) Как я понял это подойдет только для $vsego
2) Чудовищьный код не проблема, проблема оптимизации запросов к mysql.
 

Фанат

oncle terrible
Команда форума
ты ещё будешь рассуждать здесь, что проблема, а что нет?
 

HollySpirut

Guest
но за функцию спасибо

-~{}~ 02.04.06 14:07:

обиделся =)). Я считаю что эти запросы выполяются сллишком долго. Именно поэтому задал вопрос об оптимизации запросов.
 

Фанат

oncle terrible
Команда форума
почему ты в первом запросе пишешь count, а во втором - нет?

-~{}~ 02.04.06 14:09:

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

HollySpirut

Guest
Автор оригинала: Фанат
почему ты в первом запросе пишешь count, а во втором - нет?
если писать так:
$dnei1=my_result("SELECT COUNT(*) FROM `db` GROUP BY TO_DAYS(date)");
$dnei2=mysql_num_rows( @mysql_query("SELECT * FROM `db` GROUP BY TO_DAYS(date)"));

То $dnei1 в 10 раз боьше чем $dnei2. 10 наверное просто совпадение, но все-же они не равны :(
Автор оригинала: Фанат
если не доходит - человек уходит рассказывать о том, как хорошо он разбирается в своих проблемах, в другое место.
То есть ты считаешь что скрипт исполняется долго не из-за запросов, а из-за громозкости кода?
 

Фанат

oncle terrible
Команда форума
что ещё за str_replace какой-то?
вообще убери пхп и работай на прямую с запросами, в консоли.

-~{}~ 02.04.06 14:48:

То есть ты считаешь что скрипт исполняется долго не из-за запросов, а из-за громозкости кода?
я считаю, что у тебя не хватает опыта понять самостоятельно, где в твоём скрипте проблемы.
и если я тебе говорю, что в коде проблема есть, то надо не спорить, а исправлять проблему, даже если она не та, с которой ты пришёл на форум.
 

HollySpirut

Guest
Автор оригинала: Фанат
что ещё за str_replace какой-то?
вообще убери пхп и работай на прямую с запросами, в консоли.
сорри, забыл.
Автор оригинала: Фанат
я считаю, что у тебя не хватает опыта понять самостоятельно, где в твоём скрипте проблемы.
и если я тебе говорю, что в коде проблема есть, то надо не спорить, а исправлять проблему, даже если она не та, с которой ты пришёл на форум.
Я исправил, но время не уменьшилось (ну может на 0,1 и уменьшилось)
 

Фанат

oncle terrible
Команда форума
повторяю.
время исполнения - это НЕ ЕДИНСТВЕННАЯ ПРОБЛЕМА В ТВОЁМ КОДЕ.
как слышно меня? приём.
 

vadim

Guest
HollySpirut
Объясните ещё раз, что нужно. У вас есть три запроса, которые вы друг за другом выполняете и вам кажется, что они слишком долго исполняются?? Я правильно понял?

Фанат имел в виду, что сам запрос должен возвращать количество дней, то есть вы не должны использовать mysql_num_rows
 

HollySpirut

Guest
Фанат.вот, так понятно. С проблема чудовищного кода лияет только на того, кто это пишет, а тому, кто этот скрипт использует важно только время исполнения.

З.Ы. Буду рад, если ты подскажешь решегие любой проблемы.
 

Фанат

oncle terrible
Команда форума
проблема чудовищного кода лияет только на того, кто это пишет
ты ошибаешься.

если тебя интересует время исполнения, то надо брать каждый запрос по отдельности и смотреть время его исполнения.

-~{}~ 02.04.06 15:10:

откуда берётся $db?
 

HollySpirut

Guest
все, проблема нашлась. Всем спасибо. Особенно Фанату.

-~{}~ 02.04.06 15:41:

но так и не понл почему
my_result("SELECT COUNT(*) FROM `db` GROUP BY TO_DAYS(date)");
mysql_num_rows( @mysql_query("SELECT * FROM `db` GROUP BY TO_DAYS(date)"));
возвращают разные результаты
 

vadim

Guest
HollySpirut
mysql_num_rows возвращает количество строк в результате запроса, если вам количество дней надо, то это надо брать из самого запроса, а не узнавать, сколько строк запрос вернул
 

Фанат

oncle terrible
Команда форума
COUNT - это агрегатная функция и считает она по результатам группировки.
если бы ты хотя бы раз в жизни выполнил тот запрос, который с таким упрямством пишешь, и посмотрел, что он возвращает, то тогда бы и вопросов никаких не было.
 

zerkms

TDD infected
Команда форума
на закуску: ещё запросы из стартового поста требуется переписать с учётом использования индексов, если конечно пресловутая "оптимизация" есть именно ускорение работы, а не выяснения причины неверных результатов
 

Фанат

oncle terrible
Команда форума
zerkms
у меня есть сильное подозрение, что этот блок запросов выполняется в цикле...
 

HollySpirut

Guest
Фанат. Посмотрел. Действиельно понял.
zerkms. Некогда не использовал индексы для выборки(только для удаления) моет подскажешь как(или статью)?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху