mysql+150000 записей+размер 500МБ. Вешается :)

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#31
netwind:
LEOnidUKG, но тогда вам удалось использовать кеш mysql и это можно назвать хорошим решением.
Все-таки, там именно тот код используется, что вы привели? Он ведь неверный и может выводить неправильные результаты. Тянитолкай дело говорит.

Чуть поправленный, чтобы уж люди тоже могли юзать:


$pages=intval($_GET['p']);$nums=$pages-1; if ($nums<0) $nums=0; //Считываем номер запрашиваемой страницы

$result=mysql_query("SELECT id FROM `cms_freepages` WHERE cat=14 ORDER BY ID"); // Берём данные из категории cat=14

while ($rowclubs = @mysql_fetch_array($result))
{
$arrayid[]=$rowclubs['id'];
}

$cnt=sizeof($arrayid); //Количество для функции постраничного вывода

$newmass=array_chunk(array_reverse($arrayid),25); //25 = сколько записей выводить на странице

$sql = mysql_query('SELECT * FROM `cms_freepages` WHERE id in ('.implode(',',$newmass[$nums]).') ORDER BY ID DESC');

while ($rowclubs = @mysql_fetch_array($sql))
{
# Вывод данных
}
Если это комментарии, то они из одной категории, но при листании должно быть видно что они не отсортированы по времени. Тянитолкай дело говорит.

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

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
N
На сайте с 06.05.2007
Offline
419
#32

LEOnidUKG, тогда смысла нет тащить и сортировать массив. просто в цикле отсчитайте нужную страницу.

или через mysql_data_seek отлистайте до нужной позиции = 25*страница.

Вместе с mysql_unbuffered_query будет вообще пушка.

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

Кнопка вызова админа ()
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#33
Странно, что кеш mysql тут вообще помогает, ведь он должен сбрасываться при любых изменениях в таблице cms_freepages. Не особо широко применимое решение.

Правильно, таблица то обновляется 1 раз в час и всё. Более она не трогается вовсе. 1 раз попала в кэш и забыли про неё.

---------- Добавлено 24.02.2012 в 01:43 ----------

тогда смысла нет тащить и сортировать массив. просто в цикле отсчитайте нужную страницу.

Да какая разница? Это нужно count вводить. А толку то? ну будет выполняться на доли секунды меньше и всё. PHP же в памяти выполняется.

B
На сайте с 23.10.2006
Offline
170
#34
LEOnidUKG:

SELECT * FROM `cms_freepages` WHERE cat=2 ORDER id DESC LIMIT 37710, 30

Чем дальше "в лес" т.е. листаем глубже, сервер просто умирает на таком запросе и выполняется по 15 секунд. А как боты набегут и давать клацать по 10 таких запросов.

Сейчас проверил на своей базе - 400 000 записей 510МБ , 40 разных категорий

SELECT SQL_NO_CACHE * FROM `data` WHERE kat=5 ORDER BY id DESC LIMIT 37710, 30

0.8 сек.

если отсортировать базу в обратном порядке - чтобы избежать сортировки

SELECT SQL_NO_CACHE * FROM `data` WHERE kat=5 LIMIT 37710, 30

0,3 сек.

с кэшированием так ваще агонь.

PS.

kat tinyint(4)

в 5 категории 82 000 записей

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#35
mysql_unbuffered_query

Не понимаю суть данной функции и чем она быстрее. Учитывая, что код идёт сверху вниз, в любом случаи пока не будет обработан и забит массив, код дальше не пойдёт выполняться. В чём смысл?

---------- Добавлено 24.02.2012 в 02:27 ----------

bimcom:
Сейчас проверил на своей базе - 400 000 записей 510МБ , 40 разных категорий

SELECT SQL_NO_CACHE * FROM `data` WHERE kat=5 ORDER BY id DESC LIMIT 37710, 30
0.8 сек.
если отсортировать базу в обратном порядке - чтобы избежать сортировки
SELECT SQL_NO_CACHE * FROM `data` WHERE kat=5 LIMIT 37710, 30
0,3 сек.
с кэшированием так ваще агонь.
PS.
kat tinyint(4)
в 5 категории 82 000 записей

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

B
На сайте с 23.10.2006
Offline
170
#36
LEOnidUKG:

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

Я вообще-то помочь хотел, а не хвастаться.

Что мешает сортирнуть базу в обратном порядке и не использовать сортировку в каждом запросе?

PS.

А индекс базы полностью помещается в RAM? - памяти выделено достаточно? чтобы не перечитывать индексы с диска?

Я в свое время очень увлеченно тюнил свою доску объявлений - и постраничный вывод был ахилесовой пятой.

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#37
Что мешает сортирнуть базу в обратном порядке и не использовать сортировку в каждом запросе?

Про какую именно сортировку вы имеете ввиду? То что она в PHP проходит?

А индекс базы полностью помещается в RAM? - памяти выделено достаточно? чтобы не перечитывать индексы с диска?

Индекс базы 15КБ, поэтому дамб весь помещается.

B
На сайте с 23.10.2006
Offline
170
#38
LEOnidUKG:
Про какую именно сортировку вы имеете ввиду? То что она в PHP проходит?

Саму базу отсортировать.

ALTER TABLE `cms_freepages` ORDER BY `id` DESC

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#39
bimcom:
Саму базу отсортировать.
ALTER TABLE `cms_freepages` ORDER BY `id` DESC

Была бы статичная Таблица, то можно было бы сделать. А так то данные меняются автоматически.

Это уже мелочь не важная. Тут самый прикол как быстро получить список всех ID в нужной категории.

B
На сайте с 23.10.2006
Offline
170
#40
LEOnidUKG:
Была бы статичная Таблица, то можно было бы сделать. А так то данные меняются автоматически.

Раз в час поменялись - повторили сортировку и так на автомате.

Проверить же не сложно - будет толк на вашей системе или нет, заодно оцените сколько выполняется сортировка и если после неё запрос в 15 сек выполнится за 7 сек - это уже результат.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий