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

Поиск:

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


Бывалый
*


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

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



Год назад я написал программу своей первой статистики, цель была - собрать информациую откуда и сколько люедй приходят ко мне на сайты. По началу всё было просто отлично, но теперь всё это весит 60 Мб и загружается десять секунд. Нужно оптимизировать, я, попытался это сделать, но в силу своих знаний у меня это не очень получилось.

В таблице есть пять полей (IP(VARCHAR(15), SITE(VARCHAR(300), TIME(DATETIME), COMP(VARCHAR(200), WHERE(VARCHAR(100)). Есть ли какие-нибудь способы, приёмы, как это дело оптимизировать?


PM MAIL WWW MSN   Вверх
bobik02
Дата 23.9.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как один из вариантов: Перелить данные за прошлые  квартал/год/месяц в "бекапную" таблицу ...


--------------------
Have a nice day
PM   Вверх
m1kle
Дата 23.9.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



bobik02, Хорошая идея, только как сделать бекапную таблицу, и в чем её отличия от обычной?

PS: Но ведь популярность проектов растет и новой таблицы хватит только на полгода
PM MAIL WWW MSN   Вверх
bobik02
Дата 23.9.2008, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А  какие запросы  у Вас там  выполняются ?


--------------------
Have a nice day
PM   Вверх
MoLeX
Дата 23.9.2008, 17:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



скрипт в студию для начала (может что подправить можно)


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


Бывалый
*


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

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



В скрптах примитивизм полный.

Код

$ip=$_SERVER['REMOTE_ADDR'];
$site=@ $_SERVER['HTTP_REFERER'];
$comp=$_SERVER['HTTP_USER_AGENT'];
$time=date("Y-m-j, H:i:s");
$where=$_SERVER['SCRIPT_FILENAME'];

if(!$site) $site="n";

$q_ins_enter=mysql_query("insert into `enters` (`ip`,`site`,`time`,`comp`,`where`) values ('$ip','$site','$time','$comp','$where')") or die(mysql_error());


PM MAIL WWW MSN   Вверх
bobik02
Дата 23.9.2008, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну добавления это понятно, а вот с выводом(отчётами) как  код ?


--------------------
Have a nice day
PM   Вверх
password
Дата 23.9.2008, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пару дней назад писал.
У меня тоже ограничения по размеру бд. Так придумал для себя, может конечно сильно грамозко, но разбил на 3 базы:

1:
CREATE TABLE IF NOT EXISTS `stat_osn` (
              `site` varchar(80) NOT NULL,
              `kols` int(15) NOT NULL
            ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Статистика посещений - основная'

2:
CREATE TABLE IF NOT EXISTS `stat_ip` (
              `ip` varchar(50) NOT NULL
            ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Статистика посещений - уникальные ip'

3:
CREATE TABLE IF NOT EXISTS `stat_mon` (
              `site` varchar(80) NOT NULL,
              `ip` varchar(60),
              `date_in` datetime default '0000-00-00 00:00:00'
            ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Статистика посещений - за последний месяц подробная'

В 1 записываю для данного сайта kols+1;
Во 2-ю записываю и по ней же сравниваю иникальные ip;
В 3-ю записываю подробный отчет со всеми вхождениями, и храню только определенное время например - месяц:
 $dd1 = date("Y-m-d H:i:s", mktime(0,0,0,date("m")-1,date("d"),  date("Y")));
 $SQL2="delete from `stat_mon` where `date_in`<'$dd1'";
 $r2 = mysql_query($SQL2);

А дальше информер рисую с двумя цифрами, уникальных ip и количество посещений из 1 таблицы.

Это сообщение отредактировал(а) password - 23.9.2008, 18:31
PM MAIL Skype   Вверх
m1kle
Дата 23.9.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



$q_stat=mysql_query("select `stat`, `where`, `year` from `stat` WHERE `status` = '1' and `category` LIKE '%$categ%' order by `id` desc LIMIT $col2, 20") or die(mysql_error());
PM MAIL WWW MSN   Вверх
teroni
Дата 23.9.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Индексы все нужные в таблице созданы?
PM MAIL   Вверх
m1kle
Дата 23.9.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Какие индексы?
PM MAIL WWW MSN   Вверх
teroni
Дата 23.9.2008, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



http://www.mysql.ru/docs/man/MySQL_indexes.html

Для огромных таблиц - нужная вещь.. Позволяет ускорить время выполнения запросов. 
PM MAIL   Вверх
m1kle
Дата 23.9.2008, 21:46 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



teroni, прочитаю завтра, может размер некоторых полей уменьшить, или есть более экономные типы, например свой тип поля для IP адреса?
PM MAIL WWW MSN   Вверх
mr.fox
Дата 24.9.2008, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(m1kle @  23.9.2008,  21:46 Найти цитируемый пост)
например свой тип поля для IP адреса? 

Int + ip2long smile

Цитата(m1kle @  23.9.2008,  18:36 Найти цитируемый пост)
LIKE '%$categ%' 

желательно от like избавиться. Он занимает много времени.

Цитата(bobik02 @  23.9.2008,  16:38 Найти цитируемый пост)
Как один из вариантов: Перелить данные за прошлые  квартал/год/месяц в "бекапную" таблицу ... 

солидарен. На мой взгляд лучшее решение. Как только основная таблица начинает тормозить, переносить часть/все ее данные в бэкапную. 

А вообще конечно это большой поток информации. У меня на сайте начало тормозить после того как таблица выросла далеко за 1гб. 

Это сообщение отредактировал(а) mr.fox - 24.9.2008, 00:37
PM MAIL WWW ICQ   Вверх
m1kle
Дата 26.9.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

Есть вопрос, как быстро превратить таблицу в бекапную средствами HeidiSQL?

И ещё вопрос: может просто не надо записывать посещения сайта ботами?



Это сообщение отредактировал(а) m1kle - 26.9.2008, 13:57
PM MAIL WWW MSN   Вверх
yurik_l
Дата 26.9.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тарантиноман



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

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



m1kle, о индексах: http://kurepin.ru/php/index/
PM MAIL   Вверх
m1kle
Дата 1.10.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Кое-как разобрался с индексами.
select * from `enters` WHERE `time` LIKE '%".mysql_real_escape_string($tim)."%' $bot order by `".mysql_real_escape_string($o)."` ".mysql_real_escape_string($d)."

Использую вот такой запрос. Данные за год он считал до введения индекса за 8 секунд, после введения индекса - также. Непонимаю, почему.

*Думаю стоит удалить все данные о ботах, которые заходили на сайты.
*Еще появилась идея не записывать в базу время, только даты.

Вопрос: Как сделать тип данной IP?

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


Опытный
**


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

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



select * from `enters` limit 30
долго выполняеться такой запрос?
PM MAIL   Вверх
m1kle
Дата 1.10.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Валерия, 0,172 сек.

Так для любой базы, даже маленькой.
PM MAIL WWW MSN   Вверх
Валерия
Дата 1.10.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что за $bot?
Вообще что тебе нужно сделать со всеми этими записями? Вывести? Тогда делай постранично.

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


Бывалый
*


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

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



$bot - это если пользователь выбрал не показывать роботов, которые посетили сайт, ему их не показывают.

Мне нужно вывести, чтобы все были на одной странице, а вообще мне надо сократить время загрузки, 8 секунд это не дело.
PM MAIL WWW MSN   Вверх
Валерия
Дата 1.10.2008, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну смотри, если ты говоришь что у тебя база 60 мб, то ты на страницу так много выводишь о_О?
По крайней мере делай не 
select *
а перечисляй только те поля что выводишь, уже меньше мускул будет в пхп инфы передавать. Только не говори что нужно все поля и выводить)))

Это сообщение отредактировал(а) Валерия - 1.10.2008, 19:25
PM MAIL   Вверх
m1kle
Дата 1.10.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да, нужно все поля выводить.

Я думаю, можно съэкономить на удалении ботов(80% базы), и сделать дату без времени. Еще перевести IP в тип IP.
PM MAIL WWW MSN   Вверх
Валерия
Дата 1.10.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мне просто интересно сколько у тебя html страничка сгенерированная грузиться с такой кучей инфы)
Сделай делит там где встречаеться в useragent слово bot (кажись все поисковики дают юзерагент типа google-bot yandex-bot, но не уверена)
PM MAIL   Вверх
m1kle
Дата 1.10.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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


Бывалый
*


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

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



Разобрался, удалил всех ботов. Количество записей сократилось в два раза.

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

Например поле `beta` не может принимать значения, которые включают в себя "%alpha%"

Также есть вопрос, как сделать поле типа IP, с помощью MySQL?

Появился еще вопрос: как ограничит Базу данных до 50 записей?

*После предпринятых мер, время загрузки сократилось на треть.

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


Бывалый
*


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

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



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


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Цитата(m1kle @  3.10.2008,  13:46 Найти цитируемый пост)
Теперь нужно не записывать новых ботов. Вопрос, можно как-то через MySQL прописать, что поле не может принимать определенные значения.

select и если есть, то не записывать


Цитата(m1kle @  3.10.2008,  13:46 Найти цитируемый пост)
Также есть вопрос, как сделать поле типа IP, с помощью MySQL

нет такого типа поля, как и нет типа поля районные центры Хабаровского края. сделай varchar(16), а при поиске простое сравнение

Добавлено через 56 секунд
Цитата(m1kle @  3.10.2008,  13:46 Найти цитируемый пост)
Появился еще вопрос: как ограничит Базу данных до 50 записей?

select count(*)
если больше 50 или больше, не записывать

п.с. в базе таблицы, а уже в таблицах - записи
PM MAIL WWW   Вверх
georgiy11
Дата 9.11.2008, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот неплохая  статья ИМХО по оптимизации БД http://stroimsayt.com/drugoe/o-gramotnom-i...i-bd-mysql.html
PM MAIL   Вверх
skyboy
Дата 9.11.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(m1kle @  3.10.2008,  13:46 Найти цитируемый пост)
Вопрос, можно как-то через MySQL прописать, что поле не может принимать определенные значения.

только триггерами. конечно, если говорить только про использование СУБД. потому как средствами того же PHP подобная логика решается на "раз".
Цитата(bars80080 @  9.11.2008,  20:20 Найти цитируемый пост)
сделай varchar(16)

учитывая наличие встроенных функций дя работы с IP: INET_ATON и INET_NTOA, а так же стопудов более быструю индексацию для целых чисел в сравнении с индексом по тексту, учитывающим кодировку и collation, все же советовал бы использовать целочисленное поле под хранение IP

PM MAIL   Вверх
bars80080
Дата 10.11.2008, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Цитата(skyboy @  9.11.2008,  21:27 Найти цитируемый пост)
все же советовал бы использовать целочисленное поле под хранение IP

...
ссылка таки открылась и всё стало ясно

Это сообщение отредактировал(а) bars80080 - 10.11.2008, 10:14
PM MAIL WWW   Вверх
skyboy
Дата 10.11.2008, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



bars80080, нет. использовать упомянутые уже inet_ntoa и inet_aton
PM MAIL   Вверх
m1kle
Дата 11.11.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Почитал приведенную сдесь статью.

Сделал для себя три решения в плане оптимизации:

1) Прекратил записывать поисковые машины в протокол
2) Поставил все записи в режим ожидания
3) Решил разделить таблицу на две части. Тут возник вопрос, ускорит ли это работу, в одной таблице будет хранится айпи, дата, а в другой. Откуда пришел, куда пришел, компьютер пользователя.
PM MAIL WWW MSN   Вверх
bars80080
Дата 11.11.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Цитата(m1kle @  11.11.2008,  21:01 Найти цитируемый пост)
в одной таблице будет хранится айпи, дата, а в другой. Откуда пришел, куда пришел, компьютер пользователя. 

а зачем разделение?
PM MAIL WWW   Вверх
m1kle
Дата 11.11.2008, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



а зачем разделение? 

Чтобы таблица быстрее работала, сортировка будет идти по маленькой таблице, а остальные данные приписываться по второй.
PM MAIL WWW MSN   Вверх
bars80080
Дата 11.11.2008, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



а она точно будет быстрее? я понял на каждую запись в первой таблице с ip будет приходиться только одна запись (от кого, данные компа пользователя...)?
PM MAIL WWW   Вверх
m1kle
Дата 11.11.2008, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

а она точно будет быстрее? я понял на каждую запись в первой таблице с ip будет приходиться только одна запись (от кого, данные компа пользователя...)?


Да одна запись таблице с ip одна запись с данными о компьютере, и "сайтах".

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


Бывалый
*


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

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



Чтобы не создавать новую тему, спрошу здесь.

Значит есть таблица forumm. Нужно заменить тип поля айди. С инт на тиниинт. Он выдает ошибку "Duplicate entry '127' for key 1". В чем может быть проблема?

Прошу прощения, сам разобрался. Там могут быть значения от -127 до 127.

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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

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



m1kle ( структу бд встудию лучше в новый вопос... 

перепеши все на mysqli на 40% производительней и быстрей чем простые функции mysql_ ... 

да и переписывать не так много на php.su док есть. 

Это сообщение отредактировал(а) Sanchezzz - 14.11.2008, 22:02


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
m1kle
Дата 18.11.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Sanchezzz @  14.11.2008,  22:00 Найти цитируемый пост)
m1kle ( структу бд встудию лучше в новый вопос... 

перепеши все на mysqli на 40% производительней и быстрей чем простые функции mysql_ ... 

да и переписывать не так много на php.su док есть. 


Про mysqli можно поподробнее?

Пока оптимизация проходит отлично, все стало работать гораздо быстрее.

Значит сделал две таблицы. Enters (Id, Ip, Time) и Entersi (comp, site, where).
Программа, которая выводит данные сортирует все по Enters, и уже припизывает дополнительные данные по Entersi.
PM MAIL WWW MSN   Вверх
Sanchezzz
  Дата 21.11.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

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



это класс в PHP5 

вот самая нормальная дока 

пользоватся просто:

Код


$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'myBD';


//конект и выбор БД

$db = new mysqli($dbhost,$dbuser,$dbpass,$dbname);
if (mysqli_connect_errno()) {
    printf("Ошибка подключения: %s\n", mysqli_connect_error());
}

//далее работаешь как с обычным классом
$re = $db->query("Запрос");

//далее результат выбираешь из $re
while ($row = $re->fetch_assoc()) {
 print $row['id']."<br>";
}

$db->close();


+ ко всему много фичей можно на лету менять запросы (prepare и bind_param) а также создавать шаблоны запросов из простого массива или из прошлого запроса  ну об этом читать в документации подробно еще написано в phpclab.ru. 

единственное главное чтобы на сервере был php5 и mysqli ну на нормальных серверах это есть.





--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Валерия
Дата 21.11.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А есть смысл переходить на mysqli используя тот же процедурный стиль написания?
Я переделала свой скрипт на mysqli, разницы в скорости работы не обнаружила smile
PM MAIL   Вверх
ksnk
Дата 21.11.2008, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Валерия, А может не там тормозило? ;-) можно попрофилироваться xdebug'ом и почистить  именно там, где надо...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Валерия
Дата 24.11.2008, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня и так 0.005 сек скрипт в среднем выполняется, но думала, а вдруг быстрее будет )
PM MAIL   Вверх
Sanchezzz
  Дата 24.11.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

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



почитайте тут мне нравится навязывать не буду. 

при мальнеком запросе не уведете разницу в скорости.

Это сообщение отредактировал(а) Sanchezzz - 24.11.2008, 17:45


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Валерия
Дата 24.11.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Sanchezzz, не впечатлило.
Кроме подготовленных запросов, ничего нового не заметила... Да и толку от них тоже не поняла...
Как ними можно сэкономить траффик?
PM MAIL   Вверх
Sanchezzz
  Дата 24.11.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

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



незнаю насчет трафика но безопасность и скорость для меня важно + mysqli реализует работу с БД через ООП: классы и объекты. Что потенциально повышает гибкость кода, скорость.

mysqli более мощное и полное расширения для работы с БД MySQL тоже + 

зашита от иекция +
работа шаблонов +
скорость +
итд.

Ладно хватит сыр бор разводить а то тему в кашу превратили.

Это сообщение отредактировал(а) Sanchezzz - 24.11.2008, 18:30


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Валерия
Дата 24.11.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тему неплохо бы если бы разделили smile
PM MAIL   Вверх
m1kle
Дата 24.11.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Значит я посмотрел mysqli(), по моим подсчетом если брать в расчет 1000 запросов экономия во времени 0,0004 секунды.

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

Вопрос стандартный: Как еще можно оптимизировать работу Базы данных.
PM MAIL WWW MSN   Вверх
solenko
Дата 25.11.2008, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(m1kle @  1.10.2008,  16:53 Найти цитируемый пост)
Кое-как разобрался с индексами.select * from `enters` WHERE `time` LIKE '%".mysql_real_escape_string($tim)."%' $bot order by `".mysql_real_escape_string($o)."` ".mysql_real_escape_string($d)."Использую вот такой запрос. Данные за год он считал до введения индекса за 8 секунд, после введения индекса - также. Непонимаю, почему.

Запрос LIKE '%... никогда не будет использовать индекс. Это всегда fullscan т.к. вы фактически говорите, что с начала может быть любой символ.

Цитата(m1kle @  23.9.2008,  17:36 Найти цитируемый пост)
$q_stat=mysql_query("select `stat`, `where`, `year` from `stat` WHERE `status` = '1' and `category` LIKE '%$categ%' order by `id` desc LIMIT $col2, 20") or die(mysql_error());


1. Что хоанится в поле `category`?
2. Вы перевели IP на int?
3. Приведите, наконец, полную структуру таблиц. Описанная вами структура не совпадает с вашими эе запросами на выюорку.
4. http://habrahabr.ru/blogs/mysql/44608/



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
m1kle
Дата 25.11.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Селект я изменил 
Код

$sel_all=mysql_query("select * from `enters` WHERE `time` LIKE '".mysql_real_escape_string($tim)."%' order by `".mysql_real_escape_string($o)."` ".mysql_real_escape_string($d)."") or die(mysql_error());


Таблицы на данный момент таковы:

Eners(id(int(8)), ip(char(16)), time(date)
Entersi(comp(char(100)), site(char(70)), where(char(70))
PM MAIL WWW MSN   Вверх
solenko
Дата 25.11.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



m1kle почему вы работаете с полем типа date как с текстовым? Какие значения прихрдят в $tim что нужно использовать like?



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
patap
Дата 25.11.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



может чем-то поможет
http://www.mysql.ru/docs/man/EXPLAIN.html


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
Sanchezzz
  Дата 25.11.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

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



выкинь лайк используй лучше DATE_ADD() или DATE_FORMAT() 

Код

select * from `enters` WHERE `time` < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL 30 DAY


DATE_ADD() действует точно также только без форматов...
MINUTE DAY MONTH итд 





--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
m1kle
Дата 25.11.2008, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Sanchezzz @  25.11.2008,  18:43 Найти цитируемый пост)
выкинь лайк используй лучше DATE_ADD() или DATE_FORMAT() 

Выделить всёкод SQL
1:
    
select * from `enters` WHERE `time` < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL 30 DAY


DATE_ADD() действует точно также только без форматов...
MINUTE DAY MONTH итд 


$tim у меня формата Y-m-d. использовать преведнный тобой метод я готов. Только насколько он прибавит в производительности?
PM MAIL WWW MSN   Вверх
Sanchezzz
  Дата 26.11.2008, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

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



ну думаю прибавит всеж ишит интервал а не совпадения.

ну можно проверить инструментом на скорость запроса и как он грузит систему.
MySQL Query Analyzer




--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
m1kle
Дата 29.11.2008, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(m1kle @  25.11.2008,  23:54 Найти цитируемый пост)
select * from `enters` WHERE `time` < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL 30 DAY


Так тип поиска не сократил время исполнения кода.
PM MAIL WWW MSN   Вверх
Sanchezzz
Дата 29.11.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

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



что даже 0,1 сек не убавилось. Можно еще сократить поиск если в запросе указывать вазрат только определенных колонок а не всех.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
solenko
Дата 30.11.2008, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(m1kle @  29.11.2008,  17:44 Найти цитируемый пост)
Так тип поиска не сократил время исполнения кода.

Index po polyu time est?

Добавлено через 1 минуту и 35 секунд
Giv me results of
Код

explain select * from `enters` WHERE `time` < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL 30 DAY




--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
m1kle
Дата 2.12.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

<table >
  <tr id="header">
    <th>id</th>
    <th>select_type</th>
    <th>table</th>
    <th>type</th>
    <th>possible_keys</th>
    <th>key</th>
    <th>key_len</th>
    <th>ref</th>
    <th>rows</th>
    <th>Extra</th>
  </tr>
  <tr>
    <td>1</td>
    <td>SIMPLE</td>
    <td>enters</td>
    <td>range</td>
    <td>time_i</td>
    <td>time_i</td>
    <td>3</td>
    <td class="isnull"></td>
    <td>1</td>
    <td>Using where</td>
  </tr>
</table>


Вот результат запроса. Индекс по полю time есть.

Цитата(Sanchezzz @  29.11.2008,  19:06 Найти цитируемый пост)
что даже 0,1 сек не убавилось. Можно еще сократить поиск если в запросе указывать вазрат только определенных колонок а не всех. 


А там все три колонки нужны.
PM MAIL WWW MSN   Вверх
ksnk
Дата 2.12.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Я правильно понимаю, что в этом запросе часть 
Код

... WHERE `time` < DATE_FORMAT(NOW(),'%Y-%m-%d 23:59:59') - INTERVAL 30 DAY
 будет для каждой строчки перевычисляться DATE_FORMAT и минус 30 дней? Или mysql значительно умнее, чем я о нем думаю и вычислит все это один раз? по идее - ума ему взять неоткуда, функция now() как ни крути - функция...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
m1kle
Дата 4.12.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Начнем с того, что у меня дата без времени указана smile
PM MAIL WWW MSN   Вверх
krundetz
Дата 4.12.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

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



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

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

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


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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