nomarketing

nomarketing
Рейтинг
198
Регистрация
23.09.2009
bukachuk:
Млин попутал таблица cat столбец catid. Я уже честно устал и тяжело так заочно, BTREE это да оно. Посмотрите время запроса и кол-во обраатываемых строк. Если строк много и стоит filesort это жрет проц, если строк мало то это не страшно и возможно причина не в этом

К сожеление не знаю где посмотреть вреся запроса, если нужно в PHP это делать то уже завтра тогда, а так смотрел в phpmyadmin ничего не показует - в плане времени, а в SQLyog все по нолям.

А этот Filesort я заметил что стоит в почти в кадом запросе в скрипте сайта..

bukachuk:
Права колонка видите filesort ? Это значит тут индексы не задействованы, то есть mysql считает все записи из таблицы. Это может быть из-за индексов или из-за того что таблица просто мала и mysql решил что так быстрее

На этот scat.subcatid столбец индекс стоит? Если нет попробуйте поставить. После этого посмотрите опять EXPLAIN

Index type : BTREE вот что пишет - надеюсь это оно ?

bukachuk:
А чо так строк мало, вы не всю базу скопировали? У вас filesort там, но при таком кол-во строк это ерунда

Этот запрос как я понял категории только вызывает а не посты сообщений, каких строк ? -

Я выполнил запрос, приведенный мной выше.. вы мне можене обьяснить куда нужно смотреть что бы определить тажелый запрос ? Может выполнить запрос который обращаеться за Контентом ?

Вы сдесь ?

Вот ответ на мой выше запрос.

Там где чорное, то имя базы, закрасил на всякий :)

donriga:
для начала я бы даже не стал оптимизировать запрос, просто запихнул его в файловый кеш со сроком
жизни час

ну например от так http://ruseller.com/lessons.php?rub=37&id=962

Cпасибо большое, а что мне даст запрос, который я привел выше только с EXPLAIN ?

Я вот щас переменные найду и сделаю запрос,

А так я понял в принципе что нужно делать,

За что очень благодарен :)

Но запрос выложу как сделаю

donriga:
explain
select .... ваш запрос
в phpmyadmin

---------- Добавлено 17.10.2012 в 23:10 ----------

любой запрос возвращает какой либо результат, вам для начала можно закешировать результат вашего запроса полностью например на час и при обращении скрипта к базе не выполнять снова запрос а брать результат из кеша, пусть это будет файловый кеш

какой у вас движок сайта? самописный?

Т.е мне сначала нужно отпимизировать сам запрос,

Потом сделать кэш для запросов ?

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

Ну а так вроде все.

bukachuk:
Перенные то в запрос вставьте и сделайте его в базу с EXPLAIN впереди запроса и вообще сколько запрос по времени выполняеться?

Жаль что я не могу так быстро ответить вам и сделать то что вы попросили, 1, нет опыта, но я уже прочитал, что это Explain, есть щас доступ на локальный сервер, (т.е где храниться бэкап) там могу попробовать, буду рабираться.. , Или же нужно делать запрос из админ панели phpmyadmin на сервере ?

---------- Добавлено 17.10.2012 в 23:07 ----------

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

неправильно каждый раз пересчитывать все счетчики и связки категорий

К сожелению я в этом не сильно рабираюсь, в оптимизации, но примерно понял что вы имели ввиду, это нужно полностью переделывать все запросы ? или можно только этот ?

donriga:
пффф 10 тысяч записей это не серьезно,
параметры сервера в студию, полагаю у вас виртуальный хостинг)
в общем надо смотреть тормозящие запросы используя лог mysql_slow, также использовать кеширование запросов и оптимизировать структуру таблиц тирэ запросов, можте показать запрос который строит категории?

Вот запрос -

$sql = "SELECT scat.subcatid, scat.catid, COUNT(*) as adcnt

FROM $t_ads a
INNER JOIN $t_subcats scat ON scat.subcatid = a.subcatid AND ($visibility_condn)
INNER JOIN $t_cats cat ON cat.catid = scat.catid
INNER JOIN $t_cities ct ON a.cityid = ct.cityid
WHERE scat.enabled = '1'
$loc_condn
GROUP BY a.subcatid";


---------- Добавлено 17.10.2012 в 22:49 ----------

zhitov:
Всегда лучше сначала разобраться в том, что вызывает проблему. А уже затем - решать ее.
А вы как-то неправильно действуете... Что-нибудь сделать - вдруг поможет. :(

Изучите вопрос оптимизации баз.

Спасибо, я не сильно рабираюсь в майскуле - но постараюсь изучить все в плане оптимизации.

bukachuk:
10 к это слезы и лям тоже, создайте индексы

Что нужно сделать ?

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

Всего: 764