Как включить кеширование запросов

  • Автор темы Автор темы elven
  • Дата начала Дата начала

elven

Новичок
Как включить кеширование запросов

У меня на странице выполняется куча запросов. Часть я попытлся оптимизировать. Но все равно долго. Обновляется информация раз в сутки.

Почитав в интернете, что есть несколько вариантов кеширования.

1) Запись результатов в файл (кеш) и проверка по времени.

2) средствами самого mysql. Кажется query_cache_startup_type

Не можете ли помочь настроить кеш? В одном месте написано, что это должно быть выставлено в в у становках mysql, в другом, что можно выставлять и через php. А как правильн оего написать, внутри php - кода?
 
выставлять настройки кеша mysql нужно в его конфигурационном файле, скриптами php это не делается.

по оптимизации: если информация меняется раз в сутки то выполни один раз всю кучу запросов во время модификации, создав из них статический html код, который потом и показывай пользователям.
 
алгоритм поиска информации:

1. dev.mysql.com/doc/refman/4.1/en/
2. слева в поле ввода поиска вводим 'cache'
3. жмём 'ok'
4. кликаем на первый результат
5. читаем
6. кликаем на меню слева и читаем остальные разделы по теме
 
да, еще хотел добавить: долго - эт чет не нормально. самое первое: индексы расставлены?
 
Автор оригинала: alpes
да, еще хотел добавить: долго - эт чет не нормально. самое первое: индексы расставлены?
Нет, индекс только на id

вот кусочек кода:

PHP:
$sql="SELECT A.clan, count(*) as cnt, I.level 
 FROM analiz as A
 JOIN clans_all as I ON ( I.name = A.clan)
 WHERE A.date='".$ddate."' and I.level>=3
 group by A.clan
 ORDER BY cnt desc
 LIMIT 0, 12";
$topic_=mysql_query($sql);
while($topic=mysql_fetch_array($topic_)){
   ++$i;
$clan_name[$i]=$topic['clan'];
$clan2=$topic['clan'];
$col_summ[$i]=$topic['cnt'];
$sql9="select * from analiz where clan='".$clan2."'  and date='".$ddate."' order by  level desc, id";
$topic_9=mysql_query($sql9);
while($topic9=mysql_fetch_array($topic_9)){
   $name=$topic9['name'];
   $level=$topic9['level'];
if ($level>=40)   {$listclan[$i].="<tr><td valign='top' width=100><font color='#FF9933'>$tt<strong>$name</strong>$tt1</font></td><td width=100  align=center>$prof</td><td width=20>$level</td></tr>";    }
if ($level==39)   {$listclan[$i].="<tr><td valign='top' width=100><font color='#FFBB66'>$tt<strong>$name</strong>$tt1</font></td><td width=100  align=center>$prof</td><td width=20>$level</td></tr>";   }
if ($level<=38)   {$listclan[$i].="<tr><td valign='top' width=100><font color='#CC9966'>$tt<strong>$name</strong>$tt1</font></td><td width=100  align=center>$prof</td><td width=20>$level</td></tr>";  }
}

}

Можно ли как нибудь оптимизировать это?

В результате появляется массив:
$clan_name
$listclan
$col_summ
 
elven
что общего приведённый код имеет с mysql и оптимизацией запросов?
 
To zerkms:

Данный код - реакция на вопрос alpes. Каюсь, отошел от темы поста.

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

Так как я получил ответ, что кеширование включается толкьо на серверной части (где мне нет доступа к астройкам сервака), то буду думать над тем вариантом, который предложил alpes (вариант с статичным html), тем более если данный кусочек кода нельзя оптимизировать.
 
да, оптимизировать есть как раз что.
1). ты уже сам сказа - нет индексов. Обязательно почитай доку по "Использование индексов в MySQL". Индексируй как правило то что идет в WHERE, по чем связываются таблицы, группировки и сортировки. Не забывай об EXPLAIN. Проиндексируй и сразу заметишь разницу.
2). не понятно зачем сново выбирать по таблице `analiz`, хотя тут сложно судить не понимая твоей задачи и структуры данных.
3). старайся не использовать запросы внутри циклов, а получи ключи а потом делай одним запросом чтот на подобии
PHP:
"...WHERE id IN (".join(',',$ArrKey).")"
 
alpes, большое спасибо.
1) Про индексы почитаю. Т. е правильно я понял, что нужно проиндексировать все поля, по которым ведется любой поиск?
2) В базе у меня примерно 6000 записей добавляется каждый день. Это имена персонажей, их уровень принадлежность к клану т.д. Первый запрос у меня направлен на то чтобы сделать выборку отдельно по кланам, отортированной по количеству людей в Кланах, во внутреннем запросе я исходя из названия клана, составляю уже список членов по кланам.
3) А как это сделать? Я еще не очень хорошо разбираюсь в запросах. И то что в первом запросе я объединил 2 базы есть большое достижение для меня, недавно я и это не умел.

Если бы помогли объединить 2 запроса в один я был бы очень признателен.
 
elven
1. не чегото там сделать на всех полях, а вдумчиво и со смыслом )
2. в итоге то что должно получиться? выводится список членов всех кланов, кланы отсортированы по количеству? и де такое надо?
3. объединил ты не базы, а таблицы
 
Ну это просто для личных нужд собирается ежедневно статистика с офиц. игрового сервера. Там много полезной информации можно получить оперируя с этой базой. Да я неправильно написал, я объединил 2 таблицы :) а не базы
 
хм.. да мало ли что и где можно получить.. вопрос - что тебе в итоге надо получить и что и как в какой таблице хранится?
 
Таблица analiz
id int(10)
name text
level int(10)
clan text
race text
pk int(1)
date date
event text
lvl int(1)
migr int(1)
pkstat int(1)

Необходимо вывести в одном запросе
список членов Клана (name) упорядоченный по уровню в обратном порядке (level desc) согласно списку кланов (clan), в свою очередь упорядоченной по уровню клана (таблица clans_all: поля name[=clan в таблице analiz], level desc)
 
Сверху