Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация Mysql срикптов 
:(
    Опции темы
m1kle
Дата 21.5.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



На сервере MySQL жрёт 99% CPU. Как мне оптимизировать скрипты, чтобы меньше жрала, какие есть способы.
PM MAIL WWW MSN   Вверх
MoLeX
Дата 21.5.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 7
Всего: 140



m1kle, запросы в студию


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
m1kle
Дата 21.5.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



MoLeX, Их куча. В основном в программах, которые выполняются каждую минуту автоматически.

Например: $q_zav=mysql_query("select * from `zavodi`");
$zav=mysql_num_rows($q_zav);

или

$sel_p1_precomp=mysql_query("select * from `inv` WHERE `stat`='1' and `name`='$p1[4]'");
$p1_precomp=mysql_fetch_array($sel_p1_precomp);
PM MAIL WWW MSN   Вверх
MoLeX
Дата 21.5.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 7
Всего: 140



тогда может кешировать результат?


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
m1kle
Дата 21.5.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



MoLeX, а как это? Это сильно уменьшит CPU?
PM MAIL WWW MSN   Вверх
MoLeX
Дата 21.5.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 7
Всего: 140



все зависит от того сколько данных в БД. но в основном да...


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
skyboy
Дата 21.5.2008, 16:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



может, начать поиск узкого места?
или, изучив логи долгих запросов, определил, что узкое место - конкретные запросы? тогда надо колупать конкретные запросы.
оптимизация всего - штука не только бессмысленная, но и вредная. можно наоптимизировать, что станет только хуже.
Цитата(m1kle @  21.5.2008,  13:44 Найти цитируемый пост)
На сервере MySQL жрёт 99% CPU.

т.е. на сервере - только MySQL крутится? ни apache, ни РНР?
PM MAIL   Вверх
m1kle
Дата 21.5.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



skyboy, есть Apache и PHP.

Информации около 50 Мб.

Просто мне сказали, что стоит оптимизировать код, но я не знаю, как это сделать.

Это сообщение отредактировал(а) m1kle - 21.5.2008, 16:11
PM MAIL WWW MSN   Вверх
Feldmarschall
Дата 21.5.2008, 16:24 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



m1kle, делается это просто.
Сначала надо узнать, какой запрос оптимизировать.  Внимательно читаем предыдущее предложение. оно в этом топике самое важное. Как и во всех вопросах по оптимизации. Оптимизировать надо не запросы вообще, а те, которые реально тормозят.

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

После того, как нашел самые тормозящие - пытаешься понять их неоптимальность или исправить. Если не можешь самостоятельно - приходишь с этими запросами сюда.

Цитата(m1kle @  21.5.2008,  15:05 Найти цитируемый пост)
Например: $q_zav=mysql_query("select * from `zavodi`");
$zav=mysql_num_rows($q_zav);

Это можно оптимизировать и без замеров. Оторвав предварительно руки.
$q_zav=mysql_query("select count(*) from `zavodi`");

PM   Вверх
skyboy
Дата 21.5.2008, 17:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



(продолжая тему избирательной оптимизации)....да и вообще не в БД может быть дело. сокеты с большим timeout по дохлым адресам, вызовы сомнительной надежности программ через system.... да, мало ли ещё чего!
вобщем, первая задача - найти узкое место.
потом уже разберемся, как оптимирзировать.
PM MAIL   Вверх
m1kle
Дата 22.5.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Попробую..
PM MAIL WWW MSN   Вверх
m1kle
Дата 23.5.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Попробовал
$q_zav=mysql_query("select count(*) from `zavodi`");

Он почему считает только одну надпись. А работать стал действительно быстрее на 1 секунду.
PM MAIL WWW MSN   Вверх
Fortop
Дата 23.5.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



m1kle
Слово профайлинг тебе что-то говорит?
Если нет, то прочитай эту заметку http://habrahabr.ru/blog/php/37834.html

И попробуй сделать то, что там описано. Будут вопросы - задавай.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
skyboy
Дата 23.5.2008, 23:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(m1kle @  23.5.2008,  17:43 Найти цитируемый пост)
Он почему считает только одну надпись.

он и должен.
ты дал код, по которому следует, что выборка всех записей таблицы
Цитата(m1kle @  21.5.2008,  14:05 Найти цитируемый пост)
$q_zav=mysql_query("select * from `zavodi`");

делается только для того, чтоб получить количество записей
Цитата(m1kle @  21.5.2008,  14:05 Найти цитируемый пост)
$zav=mysql_num_rows($q_zav);

вот тебе Feldmarschall и привел пример оптимизации: переделал запрос так, чтоб запрос сразу возвращал только количество(одна запись), а не все подряд, только для подсчета.
если тебе надо не только количество, но и данные, то, естественно, такая оптимизация не подходит. но, черт возьми, только ты знаешь, что тебе точно надо. соотвественно, оптимизация - на твоих плечах.
P.S. Ну, как? Провел поиск узкого места? или просто на глаз определил, что "так работает быстрее"?
PM MAIL   Вверх
m1kle
Дата 25.5.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



skyboy, Потихоньку разбираюсь. Мне данные не нужны, только количество. Что-то я непонимаю.
Код

$q_zav=mysql_query("select * from `zavodi`");
$zav=mysql_num_rows($q_zav);
 - это старая запись, она очень тормозит, и как я понял делает ненужную работу.
Код

$q_zav=mysql_query("select count(*) from `zavodi`");
$zav=mysql_num_rows($q_zav);
 - тут проблема в том, что не выводит сколько записей в таблице. ( выводит "1" при echo $zav; )


Fortop, профайлинг ничего не говорит, обязательно прочитаю статью.

Ещё есть вопрос про оптимизацию.

Правда-ли, что 

"
*Селект из базы один
*Селект из базы два
*Селект из базы один"

Будет больше тормозить, чем
"
*Селект из базы один
*Селект из базы один
*Селект из базы два
"

Т.е. лучше сначало работать с одной таблицей, потом с другой, чем сначало с одной, потом со второй, а потом опять с первой.
PM MAIL WWW MSN   Вверх
Feldmarschall
Дата 25.5.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Слушай, если ты не можешь получить строку из БД, то тебе не оптимизацией надо заниматься, а учиться с БД работать. 
http://www.intuit.ru/department/database/mysql/12/ - учебный курс. Освой хотя бы азы. Чтобы такие вопросы тебя не ставили в тупик.

Цитата(m1kle @  25.5.2008,  21:03 Найти цитируемый пост)
Ещё есть вопрос про оптимизацию.


Это вопрос не про оптимизацию. 
Ещё раз, если ты не понял:
Оптимизировать надо то, что тормозит. А не то, про что кто-то где-то сказал.
PM   Вверх
Fortop
Дата 25.5.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(m1kle @  25.5.2008,  21:03 Найти цитируемый пост)
- тут проблема в том, что не выводит сколько записей в таблице. ( выводит "1" при echo $zav; 

А если отойти в сторону от функции PHP mysql_num_rows()
и почитать что тебе возвращает SQL функция COUNT()?

не хочешь попробовать?
Цитата(m1kle @  25.5.2008,  21:03 Найти цитируемый пост)
Fortop, профайлинг ничего не говорит, обязательно прочитаю статью.
Ещё есть вопрос про оптимизацию.

Без понимания что такое профайлинг и для чего он - оптимизировать бесполезно.



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
m1kle
Дата 7.6.2008, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Fortop, что такое профайлинг я кажется понял, но как его использовать нет. Пороюсь в интернете.

И ещё, там же про PHP код говорится.

Про count тоже поищу в интернете.

Это сообщение отредактировал(а) m1kle - 7.6.2008, 01:00
PM MAIL WWW MSN   Вверх
Fortop
Дата 7.6.2008, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



m1kle
xdebug.org,
плюс на Хабре были заметки про то, как проводить профайлинг.

Собственно ничего сложного. Ставишь xdebug, настраиваешь его.

Затем запускаешь скрипт на выполнение. Служебная информация пишется в указанную тобой директорию.

Просмотреть ее можно через WinCacheGrind.

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


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
m1kle
Дата 7.6.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Разбираюсь, там не так то просто установить, на UNIX.
PM MAIL WWW MSN   Вверх
m1kle
Дата 9.6.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Xdebug очень сложно скомпилировать.
Какое приложение отвечает за команду phpize? А то у меня она пишет, что команда не найдена.

Сорри за даблпостинг - не заметил.

P.S.: Функцией count(*) я пользоваться научился.

И ещё, я тут задумался о Xdebug'e, а нужен ли он вообще, время выполнения можно посмотреть и в HeidiSQL. Другое дело, как именно оптимизировать.

Это сообщение отредактировал(а) m1kle - 9.6.2008, 17:55
PM MAIL WWW MSN   Вверх
Feldmarschall
Дата 9.6.2008, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



для первичного профайлинга достаточно функции microtime()
PM   Вверх
IZ@TOP
Дата 9.6.2008, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



m1kle, если у тебя фря, идешь в порты (если PHP собран из портов) 

Код

cd /usr/ports/devel/php-xdebug/
make install


Потом тебе предложат подключить сошку в конфиг как zend_extension. Подключаешь. Дальше настраиваешь конфиг по ману и радуешься жизни.

А еще есть такая фича как EXPLAIN запросов в MySQL. Проверь все свои запросы, используют ли они индексы и т.п.
Подробнее...
А еще лучше, как кто-то тут сказал, попробовать для начала основы программирования и баз данных выучить. И, заодно, как пользоваться интернетом (в т.ч. http://google.com).

P.S. Ребят, я плакал с этой темы)


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
m1kle
Дата 10.6.2008, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



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


IZ@TOP, cd /usr/ports/devel/php-xdebug/ - такой папки у меня нету.


Код

$q = mysql_query("select * from `work`");
$wk = mysql_fetch_array($q);
$wrk = mysql_num_rows($q);
mysql_query("DELETE from `work` WHERE `time` < 0");
if($wrk!=0)
{
    mysql_query("UPDATE `work` SET `time` = `time` -1");
    $quarre = mysql_query("select * from `work` where `time` = '0'");

    while($work = mysql_fetch_array($quarre))
    {
        $qu = mysql_query("select * from `zavodi` where `id` = '$work[1]'");
        $z = mysql_fetch_array($qu);

        $us1 = mysql_query("select * from `users` WHERE `personaName` = '$work[2]'");
        $row1 = mysql_fetch_array($us1);

        mysql_query("UPDATE `users` SET `money` = `money` + '$z[4]' WHERE personaname = '$work[2]'");
        mysql_query("UPDATE `zavodi` SET `nm` = `nm` + 1 where `id` = '$work[1]'");
        mysql_query("UPDATE `zavodi` SET `balans_m` = `balans_m` - '$z[4]' where `id` = '$work[1]'");
        mysql_query("UPDATE `users` SET `pr` = '$work[1]' WHERE `personaname` = '$work[2]'");
        mysql_query("UPDATE `users` SET `z` = `z` + $z[4] WHERE `personaname` = '$work[2]'");
        mysql_query("UPDATE `ot` SET `rab` = `rab` + 1 WHERE `id` = '1'");
        mysql_query("UPDATE `users` SET `rh` = `rh` + 1 WHERE `personaname` = '$work[2]'");
        $f = rand(1,2);
        if($f==1){ mysql_query("UPDATE users SET `dob` = `dob` + 1 WHERE personaName = '$work[2]'");}
        else{}
        $a = 10 + $row1[13]; $b = rand(1,2);

        if($b == 1) $c = "+" ;
        if($b == 2) $c = "-" ;

        $d = rand(0,3);
        $e = "$a $c $d";

        mysql_query("UPDATE `zavodi` SET `all_res` = `all_res` - $e WHERE id = '$work[1]'");
        mysql_query("UPDATE zavodi SET res = res + $e  where id = '$work[1]'");

        $ball=array("15", "50", "80", "150", "240", "350", "470", "680", "900", "1200", "1500"); $i=0;
        while($i<10){
            if($row1[12] > $ball[$i]){ $i++;}
            else{mysql_query("UPDATE `users` SET `d` = $i WHERE `personaName` = '$work[2]'") or  die(mysql_error()); $i=11;}
        } $i=0;

        $ball=array("10", "20", "50", "80", "170", "300", "450", "600", "850", "1100", "1700", "2200", "2800", "3500");
        while($i<13){
        if($row1[34] > $ball[$i]){ $i++;}
        else{mysql_query("UPDATE `users` SET `um` = $i WHERE `personaName` = '$work[2]'") or  die(mysql_error()); $i=14;}
        }

        mysql_query("UPDATE `company` SET `rayting` = `rayting` + '1' WHERE `name` = '$z[1]'");
        mysql_query("UPDATE `zavodi` SET `rayting` = `rayting` + '1' WHERE `id` = '$z[0]'");
        mysql_query("DELETE FROM `work` WHERE `pers` = '$work[2]'") or  die(mysql_error()) ;
    }
}


 Вот например код, ну что тут можно оптимизировать?
PM MAIL WWW MSN   Вверх
IZ@TOP
Дата 10.6.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Feldmarschall, +1.


m1kle, а я и не говорил что она у тебя должна быть. Я ведь не знаю какая у тебя система, просто для примера привел.
А вот что оптимизировать в этом коде, это ты должен сам определить. 
Хотя бы запросы протестируй как я говорил:

Код

EXPLAIN твой-SELECT-запрос



Это сообщение отредактировал(а) IZ@TOP - 10.6.2008, 15:55


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Feldmarschall
Дата 10.6.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



IZ@TOP, тут апдейты в цикле. И не в цикле. И по одному, и пачками. И вся база перетряхивается. 
Этот тот случай, когда эксплейн не поможет - здесь руки надо выпрямлять и мозги вправлять, а не отдельные запросы тестировать.
Тут только моя рекомендация поможет, которую добрый модератор удалил. Потому что тишина должна быть в библиотеке.

Добавлено через 3 минуты и 46 секунд
меня другое радует:
Цитата(m1kle @  9.6.2008,  16:55 Найти цитируемый пост)
Функцией count(*) я пользоваться научился.

Цитата(m1kle @  10.6.2008,  03:10 Найти цитируемый пост)
$q = mysql_query("select * from `work`");
$wk = mysql_fetch_array($q);
$wrk = mysql_num_rows($q);


Добавлено через 5 минут и 7 секунд
m1kle, как часто выполняется этот скрипт?
каков размер таблицы zavodi и других, перечисленных в этом скрипте?
PM   Вверх
m1kle
Дата 11.6.2008, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



IZ@TOP, тут апдейты в цикле. И не в цикле. И по одному, и пачками. И вся база перетряхивается. 

Так получается, это замысл работы скрипта.
Про count(*) в такой маленькой БД count ничего не даст.

Work 4 Кб
Zavodi 12,4 Кб
Users 295 Кб

Скрипт выполняется раз в минуту.

Как считает, можно что нибудь сдесь улучшить?
PM MAIL WWW MSN   Вверх
Feldmarschall
Дата 11.6.2008, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Цитата(m1kle @  11.6.2008,  03:30 Найти цитируемый пост)
Work 4 Кб
Zavodi 12,4 Кб
Users 295 Кб

какие интересные таблицы. а где же остальные 50 мегабайт лежат?
Цитата(m1kle @  11.6.2008,  03:30 Найти цитируемый пост)
Так получается, это замысл работы скрипта.

Вот об том и речь, что замысел и надо переделывать. Замысел. Заплатками тут не обойдешься.
Не нужно раз в минуту ничего апдейтить. БД не для этого предназначена. 
все данные можно вычислить по надобности. пришел игрок через час - посчитал его параметры - и записал в базу. один раз за час. а не 60.
Это азы. основы. И у тебя они не выполняются. И оптимизировать этот винегрет из апдейтов - бесполезно.



PM   Вверх
Feldmarschall
Дата 11.6.2008, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Цитата(m1kle @  10.6.2008,  03:10 Найти цитируемый пост)
        mysql_query("UPDATE `users` SET `money` = `money` + '$z[4]' WHERE personaname = '$work[2]'");
        mysql_query("UPDATE `zavodi` SET `nm` = `nm` + 1 where `id` = '$work[1]'");
        mysql_query("UPDATE `zavodi` SET `balans_m` = `balans_m` - '$z[4]' where `id` = '$work[1]'");
        mysql_query("UPDATE `users` SET `pr` = '$work[1]' WHERE `personaname` = '$work[2]'");
        mysql_query("UPDATE `users` SET `z` = `z` + $z[4] WHERE `personaname` = '$work[2]'");
        mysql_query("UPDATE `ot` SET `rab` = `rab` + 1 WHERE `id` = '1'");
        mysql_query("UPDATE `users` SET `rh` = `rh` + 1 WHERE `personaname` = '$work[2]'");
        $f = rand(1,2);
        if($f==1){ mysql_query("UPDATE users SET `dob` = `dob` + 1 WHERE personaName = '$work[2]'");}

ну ХОТЯ БЫ сократить эту колбасу до трех запросов можно было догадаться?

и сколько у тебя таких скриптов, которые раз в минуту выполняются?
и сколько вообще запросов приходится на скрипт?
PM   Вверх
m1kle
Дата 11.6.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



50 мегабайт, в другой таблице, в которая не участвуете в предоставленным мною скрипту.

"Вот об том и речь, что замысел и надо переделывать. Замысел. Заплатками тут не обойдешься.
Не нужно раз в минуту ничего апдейтить. БД не для этого предназначена. 
все данные можно вычислить по надобности. пришел игрок через час - посчитал его параметры - и записал в базу. один раз за час. а не 60.
Это азы. основы. И у тебя они не выполняются. И оптимизировать этот винегрет из апдейтов - бесполезно."

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

"ну ХОТЯ БЫ сократить эту колбасу до трех запросов можно было догадаться?"

Разве можно делать сразу несколько запросов к таблице одним Апдейтом?

"и сколько у тебя таких скриптов, которые раз в минуту выполняются?"

Есть ещё один, огромный, двести строк.

Остальные раз в час, раз в день.
PM MAIL WWW MSN   Вверх
Feldmarschall
Дата 11.6.2008, 21:28 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



НЕСКОЛЬКО ПОЛЕЙ в одной строке можно обновлять ОДНИМ запросом.
если ты в таблице users меняешь поля money, rh, и dob, то это можно, и нужно! делать одним запросом. а не десятью.
ты так и не ответил на вопрос, сколько всего запросов исполняется
PM   Вверх
skyboy
Дата 11.6.2008, 21:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(m1kle @  11.6.2008,  20:14 Найти цитируемый пост)
там нужно каждую минуту проверять

зачем? пришел запрос - проверили. не пришел - ничего не проверяем. или ты думаешь, что автоинкрементный счетчик работы даже без надобности в нем - это круто? smile
PM MAIL   Вверх
Fortop
Дата 11.6.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(m1kle @  11.6.2008,  21:14 Найти цитируемый пост)
В онлайн играх есть такая штука, как работа, там нужно каждую минуту проверять, не закончил ли кто-то работать, это необходимо.

Зачем?

Данные нужно проверять лишь при обращении к ним. Иначе у тебя никакая база не выдержит.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
m1kle
Дата 12.6.2008, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Feldmarschall, прочитал я синтаксис оператора UPDATE, стало многое понятно.


skyboy, всегда кто-то работает, всегда нужно уменьшать время сколько осталось работать на еденицу.

Fortop, У мен так и есть, если что-то лежит в базе - делаем, не лежит, не делаем.

Код

$q = mysql_query("select * from `work`");
$wk = mysql_fetch_array($q);
$wrk = mysql_num_rows($q);
mysql_query("DELETE from `work` WHERE `time` < 0");
if($wrk!=0)
{
    mysql_query("UPDATE `work` SET `time` = `time` -1");
    $quarre = mysql_query("select * from `work` where `time` = '0'");

    while($work = mysql_fetch_array($quarre))
    {
        $qu = mysql_query("select `comp`,`zarplata` from `zavodi` where `id` = '$work[1]'");
        $z = mysql_fetch_array($qu);

        $us1 = mysql_query("select `dob`,`d`,`um` from `users` WHERE `personaName` = '$work[2]'");
        $row1 = mysql_fetch_array($us1);

        $f = rand(1,2);
        if($f==1){ mysql_query("UPDATE `users` SET `dob` = `dob` + 1 WHERE `personaName` = '$work[2]'");}

        $a = 10 + $row1[2]; $b = rand(1,2);

        if($b == 1) $c = "+";
        else $c = "-";

        $d = rand(0,3);
        $e = "$a $c $d";

        $ball=array("15", "50", "80", "150", "240", "350", "470", "680", "900", "1200", "1500"); $i=0;
        while($i<10){
            if($row1[0] > $ball[$i]){ $i++;}
            else{mysql_query("UPDATE `users` SET `d` = $i WHERE `personaName` = '$work[2]'") ; $i=11;}
        } $i=0;

        $ball=array("10", "20", "50", "80", "170", "300", "450", "600", "850", "1100", "1700", "2200", "2800", "3500");
        while($i<13){
        if($row1[3] > $ball[$i]){ $i++;}
        else{mysql_query("UPDATE `users` SET `um` = $i WHERE `personaName` = '$work[2]'"); $i=14;}
        }

        mysql_query("UPDATE `company` SET `rayting` = `rayting` + '1' WHERE `name` = '$z[0]'");
        mysql_query("UPDATE `zavodi` SET `all_res` = `all_res` - $e, `res` = `res` + $e, `rayting` = `rayting` + 1 WHERE id = '$work[1]'");
        mysql_query("DELETE FROM `work` WHERE `pers` = '$work[2]'");
        mysql_query("UPDATE `users` SET `money` = `money` + '$z[1]', `pr` = '$work[1]', `z` = `z` + $z[1], `rh` = `rh` + '1'  WHERE personaname = '$work[2]'");
        mysql_query("UPDATE `zavodi` SET `nm` = `nm` + 1, `balans_m` = `balans_m` - '$z[4]' WHERE `id` = '$work[1]'");

    }
}


Вот новый код. Помоему по сравнению со старым кодом, это просто супер-код. Что то ещё можно сделать?

Это сообщение отредактировал(а) m1kle - 12.6.2008, 23:03
PM MAIL WWW MSN   Вверх
Feldmarschall
Дата 12.6.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



ничего.
как тебе уже сто раз сказали - оптимизируют не супер-кодом, а замерами.
ты этого так и не понял. и не поймешь.
PM   Вверх
skyboy
Дата 13.6.2008, 08:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(m1kle @  12.6.2008,  21:55 Найти цитируемый пост)
skyboy, всегда кто-то работает

у тебя реальная работа с лопатой за окном или модель, основанная на БД и алгоритмах? 
положим, мне надо определить время выполнения скрипта. как мне лучше сделать: каждую секунду увеиличать счетчик секунд на 1 или посчитать время до запуска, время после выполнения и вычислить разницу?
PM MAIL   Вверх
Fortop
Дата 13.6.2008, 11:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Цитата(m1kle @  12.6.2008,  22:55 Найти цитируемый пост)
Fortop, У мен так и есть, если что-то лежит в базе - делаем, не лежит, не делаем

Тебе skyboy, уже привел пример.
Вопрос не в делаем/не делаем.

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

И только 1-2 раза в сутки ты можешь сделать глобальный пересчет. Например для статистики/рейтингов и т.д.

Пример.

Есть иммитатор выращивания морковки. Вместо того чтобы каждую секунду обновлять базу, что какая-то морковка выросла на 1мм.
Мы сохранили ее состояние на момент посева 0мм и время. Также у нас есть формула за сколько времени она вырастает на 1мм.

Тогда, если пользователь посмотрел на эту конкретную морковку.... 
1. Мы читаем состояние из базы, вычисляем разницу между временем текущим и тем что в базе. 
2. Записываем новое состояние (3мм и время в базу).


Все остальное время мы базу не трогаем.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
m1kle
Дата 18.6.2008, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Похоже я начинаю въезжать. Только реализовать вычитание из одного времени другое?

Тогда получается штука, которая выполняется раз в минуту не нужна.
PM MAIL WWW MSN   Вверх
Feldmarschall
Дата 18.6.2008, 08:54 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



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

Надо смотреть в базе show processlist в момент, когда проц занят
смотреть slow queries log

PM   Вверх
m1kle
Дата 18.6.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Да, две тысячи сто с небольшим человек.

В этом скрипте уже неважно, где тормозит, его скоро не будет.
PM MAIL WWW MSN   Вверх
Feldmarschall
Дата 18.6.2008, 09:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



хех. действительно. теперь будет тормозить в другом =)
PM   Вверх
IZ@TOP
Дата 18.6.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Цитата(Feldmarschall @  10.6.2008,  17:14 Найти цитируемый пост)
IZ@TOP, тут апдейты в цикле. И не в цикле. И по одному, и пачками. И вся база перетряхивается. 
Этот тот случай, когда эксплейн не поможет - здесь руки надо выпрямлять и мозги вправлять, а не отдельные запросы тестировать.
Тут только моя рекомендация поможет, которую добрый модератор удалил. Потому что тишина должна быть в библиотеке.


Feldmarschall, на счет выпрямления конечностей согласен. И за дурачка, пожалуйста, меня не держи, ок? А вот апдейты - не самое страшное, если на поля в условии созданы индексы. Еще меньше это все роляет, если таблица InnoDB с транзакциями. 

Цитата(m1kle @  11.6.2008,  22:14 Найти цитируемый пост)
Разве можно делать сразу несколько запросов к таблице одним Апдейтом?


Я плачу...


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Feldmarschall
Дата 18.6.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Цитата(IZ@TOP @  18.6.2008,  12:57 Найти цитируемый пост)
А вот апдейты - не самое страшное, если на поля в условии созданы индексы. 

ты хотел сказать - наоборот. если селекты, то не самое страшное, если в полях созданы индексы.
а вот апдейтов, как раз, злейший враг - индексы. поскольку после каждого апдейта надо ВЕСЬ индекс перестроить. что есть операция гораздо более затратная, чем, просто записать новую строчку в таблицу.
PM   Вверх
IZ@TOP
Дата 18.6.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Цитата(Feldmarschall @  18.6.2008,  14:23 Найти цитируемый пост)
ты хотел сказать - наоборот. если селекты, то не самое страшное, если в полях созданы индексы.
а вот апдейтов, как раз, злейший враг - индексы. поскольку после каждого апдейта надо ВЕСЬ индекс перестроить. что есть операция гораздо более затратная, чем, просто записать новую строчку в таблицу. 

Я как хотел - так и сказал. Давайте не будем путать понятия: апдейт и инсерт. 
А что происходит, когда на таблице MyISAM проходит запрос на UPDATE с условием по полю, на котором нет индекса я видел неоднократно. И результат, самое главное, всегда один: забивается очередь запросов.

По поводу перестройки индексов, читаем оф. документацию:
Цитата

7.2.20. Speed of UPDATE Statements

An update statement is optimized like a SELECT query with the additional overhead of a write. The speed of the write depends on the amount of data being updated and the number of indexes that are updated. Indexes that are not changed do not get updated


Это сообщение отредактировал(а) IZ@TOP - 18.6.2008, 14:27


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
m1kle
Дата 18.6.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Я же сказал, откажусь от функции, которая выполняется раз в минуту. Но тут другая проблема, допустим я записал в базу время устройства на работу..как мне его вытащить, и вычесть его из текущего времени?
PM MAIL WWW MSN   Вверх
IZ@TOP
Дата 18.6.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



m1kle, тут свои дебаты smile
http://dev.mysql.com/doc/refman/5.1/en/dat...-functions.html на счет Вашего вопроса, советую ознакомиться.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Feldmarschall
Дата 18.6.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



m1kle, мы слышали, что ты сказал.
Мы только не видели информации, которая показывает, что все тормоза именно из-за этого скрипта.

Цитата(IZ@TOP @  18.6.2008,  14:05 Найти цитируемый пост)
The speed of the write depends on ... the number of indexes that are updated. Indexes that are not changed do not get updated. 

IZ@TOP, честно говоря, эти два предложения звучат для меня взаимоисключающе. Надо будет поспрашивать специалистов...

PM   Вверх
IZ@TOP
Дата 18.6.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Feldmarschall, а то что написано в официальной документации по MySQL тебя не устраивает? За специалистами далеко ходить не нужно. Я могу ответить на большинство твоих вопросов исходя из знаний/опыта.

Это сообщение отредактировал(а) IZ@TOP - 18.6.2008, 14:35


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Feldmarschall
Дата 18.6.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



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

Добавлено @ 14:44
Тьфу. Я тормоз. пропустил слово "that" в следующем предложении. 
Сорри. То есть, обновляются не все индексы, а только те, в которых данные поля изменились.
то есть, индекс по id, к примеру, не перестраивается.
А если есть по полю date, и оно изменилось - то перестраивается

Это сообщение отредактировал(а) Feldmarschall - 18.6.2008, 14:44
PM   Вверх
IZ@TOP
Дата 18.6.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Feldmarschall, верно!
На самом деле, я сам не в совершенстве знаю MySQL. Поэтому, если в чем-то не уверен (да даже если уверен), иду в доку и смотрю что к чему.




--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
m1kle
Дата 18.6.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



http://dev.mysql.com/doc/refman/5.1/en/dat...-functions.html на счет Вашего вопроса, советую ознакомиться. 

Помоему глупо использовать таких вещей MySQL, не быстрее будет сделать с помощью PHP.

И ещё мне непонятно, как вычесть из одной даты другую средствами mktime()
Код

$sel=mysql_query("select `date` from nnb WHERE id = 569");
$q=mysql_fetch_array($sel);
$q2=mysql_query("SELECT DATE_FORMAT('$q[0]', '%H-%i-%s %m:%d:%Y')") or die(mysql_error());
$qq2=mysql_fetch_array($q2);
echo mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y"))-mktime($qq2[0]));

Я пытался так, неполучилось.
PM MAIL WWW MSN   Вверх
IZ@TOP
Дата 18.6.2008, 15:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



m1kle, в плане удобства, проще вычислить на уровне MySQL.
Что-то вы прям извращение в коде придумали, честное слово... 

Код

SELECT DATEDIFF(datefield, NOW()) as days, table.* FROM table WHERE ...


Так не проще? Получаем поле в результате выборки с интересующей нас информацией.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
m1kle
Дата 18.6.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Эта штука показывает разницу в днях, а мне нужна разница в минутах..
PM MAIL WWW MSN   Вверх
IZ@TOP
Дата 19.6.2008, 16:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Вот ведь ленивый человек!

http://dev.mysql.com/doc/refman/5.1/en/dat...n_timestampdiff
Пример 1.1:
Код

SELECT TIMESTAMPDIFF(MINUTE, field, NOW()) as minutes, table.* FROM table


http://dev.mysql.com/doc/refman/5.1/en/dat...nction_timediff
Пример 1.2:
Код

SELECT TIME_FORMAT(TIMEDIFF(NOW(), field), "%i") as minutes, table.* FROM table



Это сообщение отредактировал(а) IZ@TOP - 19.6.2008, 16:11


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
m1kle
Дата 19.6.2008, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



IZ@TOP, Прости пожалуйста, не заметил smile

Теперь работает, очень благодарен.

Поставлю тебе плюсик в репутацию ;)

Буду пользоваться. Но оптимизация на этом не завершена.
PM MAIL WWW MSN   Вверх
m1kle
Дата 24.6.2008, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Расскажу о своей самой большой временной функции, выполняется раз в минуту, 132 строки, выполняется 0,3 секунды.
PM MAIL WWW MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1940 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.