- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как удалить плохие SEO-ссылки и очистить ссылочную массу сайта
Применяем отклонение ссылок
Сервис Rookee
ну а изначальный тогда что возвращает и сколько выполняется? не должен сильно отличаться
SELECT * FROM `cms_freepages` WHERE cat=2 ORDER id DESC LIMIT 37710, 30
$result=mysql_query("SELECT id FROM `cms_freepages` WHERE cat=14");
while ($rowclubs = @mysql_fetch_array($result))
{
$arrayid[]=$rowclubs['id'];
}
$cnt=sizeof($arrayid);
$newmass=array_chunk(array_reverse($arrayid),25);
echo 'SELECT * FROM `cms_freepages` WHERE id in ('.implode(',',$newmass[11]).') ORDER BY ID';
Отображает строки 0 - 24 ( 25 всего, запрос занял 0.1117 сек.)
у Вас тут в первом запросе нет order, поэтому результат не равнозначный первоначальному и некорректный в целом.
В Вашем текущем варианте Вы выбираете записи по сути в случайном порядке (на самом деле нет, но тут важно то, что он непредсказуемый и не константа), потом берете 25 записей из середины и сортируете их по ИД. Это не лучшая идея, у Вас даже на одной странице при 2 обновлениях подряд не гарантируется одинаковость контента.
ради интереса проверьте как быстро выполняется
SELECT id FROM `cms_freepages` WHERE cat=2 ORDER id DESC LIMIT 37710, 30
в вашем первоначальном выцепляются все поля - ответ получается длинным и не попадает в кэш.
А ваше решение
$result=mysql_query("SELECT id FROM `cms_freepages` WHERE cat=14");
while ($rowclubs = @mysql_fetch_array($result))
{
$arrayid[]=$rowclubs['id'];
}
$cnt=sizeof($arrayid);
$newmass=array_chunk(array_reverse($arrayid),25);
echo 'SELECT * FROM `cms_freepages` WHERE id in ('.implode(',',$newmass[11]).') ORDER BY ID';
Отображает строки 0 - 24 ( 25 всего, запрос занял 0.1117 сек.)
Летает по причине того что есть всего 19 разных запросов, а тех,когда выполняется с лимитом, 100500 , которые удачно ложатся в кэш и благодаря частомы выполнению там поселяются навсегда, но ровно до того момента когда тело ответа <1МБ (по дефолту в MySQL)
Когда я упёрся в постоянное длительное дёрганье диска, то да, решил в лоб. Создал виртуальный раздел в памяти и поместил БД туда. Скорость возрасла раз этак в 5-10 как минимум. Процессор был напряжён почти постоянно, зато диски не шевелились подолгу. Перегнал всё, что мне надо, за 8 часов, и усё.
Под Windows Server 2003 дело было.
ну а изначальный тогда что возвращает и сколько выполняется? не должен сильно отличаться
SELECT * FROM `cms_freepages` WHERE cat=2 ORDER id DESC LIMIT 37710, 30
MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 4.0899 сек. )
А у меня:
1. Запрос: Отображает строки 0 - 29 ( 3,898 всего, запрос занял 0.1916 сек.) [id: 515 - 1203]
2. Запрос: Отображает строки 0 - 24 ( 25 всего, запрос занял 0.0736 сек.)
Я конечно понимаю вложенность запросов и т.п., но я знаю суть, что мускуль любит простые запросы, их я ей и даю.
---------- Добавлено 24.02.2012 в 00:01 ----------
Ох было бы у меня памяти 32 ГБ, положил бы тоже туда, но увы, у меня на весь сервер 2 гб.
Я конечно понимаю вложенность запросов и т.п., но я знаю суть, что мускуль любит простые запросы, их я ей и даю.
mysql любит запросы тех, кто понимает что он, mysql, делает. и все.
А у меня
А у вас вообще результаты другие должны быть, судя по коду. Проверьте результаты на идентичность оригинальным и адекватность.
---------- Добавлено 23.02.2012 в 22:21 ----------
MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 4.0899 сек. )
теперь видно, что первоначальный запрос даже быстрее запроса построенного по вашей теории?
netwind, действительно поторопился с выводами. Сейчас кэши очистил, разницы в скорости не увидил, что мой код на PHP, что запрос в БД.
LEOnidUKG, очистили кеши чего? mysql query cache или внутренние кеши сайта?
Если бы вы кешировали список ид по категориям и на основе этого кеша строили листалку страниц, то был бы толк.
Интересно было бы проверить как будет работать подобная листалка построенная на большом query_cache + mysql_unbuffered_query + mysql_data_seek. Эта связка может имитировать LIMIT без перекачивания к php всего списка идентификаторов в категории. Но вот кеш mysql очищается весь при любом изменении опорной таблицы. На практике скорее всего никто не использует подобное.
У сайта кэша нет. У меня там более 600 страниц в каждой категории я могу тыкать сколько угодна.
Я просто мускуль перезагрузил :)
Но по млин, визуально даже мой код быстрее работает. Скорее всего сказывается то, что ID категорий плотно зависает в индексе мускуля.
LEOnidUKG, но тогда вам удалось использовать кеш mysql и это можно назвать хорошим решением.
Все-таки, там именно тот код используется, что вы привели или другой ? Он ведь неверный и может выводить неправильные результаты.
Если это комментарии, то они из одной категории, отсортированы на каждой странице, но при листании страниц не отсортированы относительно этих страниц. Тянитолкай дело говорит.