- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Ребята, собственно нужны знатоки mysql. Может возможно как нить перестроить данный запрос
$inqnl = $db->query("SELECT * FROM ".$basepref."_news WHERE catid = 1 ORDER BY public DESC LIMIT 0,1");
if ($db->numrows($inqnl) > 0) { while ($item=$db->fetchrow($inqnl)) {
......
}
}
так чтобы выполнялся быстрей? таких запросов на странице около 20. Возможно глупый вопрос но в моём случае очень актуальный.
Ребята, собственно нужны знатоки mysql. Может возможно как нить перестроить данный запрос
$inqnl = $db->query("SELECT * FROM ".$basepref."_news WHERE catid = 1 ORDER BY public DESC LIMIT 0,1");
if ($db->numrows($inqnl) > 0) { while ($item=$db->fetchrow($inqnl)) {
......
}
}
так чтобы выполнялся быстрей? таких запросов на странице около 20. Возможно глупый вопрос но в моём случае очень актуальный.
Напишите остальные запросы.
Кэширование не пробовали включать?
Напишите остальные запросы.
Кеширование не пробывали включать?
так выглядит весь скрипт. он повторяется порядка 10-15 раз на странице. кеширование используется жесткое, но всё равно идет нагрузка на mysql
так выглядит весь скрипт. он повторяется порядка 10-15 раз на странице. кеширование используется жесткое, но всё равно идет нагрузка на mysql
С точно такиже запросом?
Если да, то в чем проблема, сохраните данные в какой нибудь переменной и выводите 10-15 раз.
А вообще, запрос не такой уж и тяжелый...совсем даже не тяжелый.
1. Если выборка идет из одной таблицы и одним и тем же запросом, то конечно лучше один раз выбрать и загнать в массив, например.
А потом уже оставшиеся 9 раз к базе не обращаться, а использовать подготовленный ранее массив!!!
Но есть нюанс, с размером массива, если записей 3 млн., то хрен знает будет ли это хорошо, не тестил на таких ;(.
2. Если записей много, то можно врубить и кеширование и еще одну штуку.
Основная нагрузка идет от ORDER BY
Можно по крону раз в 4 часа например подготавливать отдельную таблицу и вносить в неё данные уже отсортированными!!! Тогда при выборке не нужно будет писать ORDER BY, поверьте, очень поможет.
3. Ну и есть такая фича как SLAVE и MASTER, но это уже другая история...
Оптимизация, дело такое...
==============
кстати может помочь аренда сервака, общий хостинг вообще мало чего выдерживает ;(
catid у вас первичный ключ? если так, то зачем тут вообще ORDER BY....
Нет catid не первичны. Выборка идет именно по catid, тоесть есть 10-15 категорий и нужно в разных блоках отображать по 5 новостей из разных категорий. Получаеться нужно пожторять код несколько раз с разными catid
ах да и сервер VDS разгон от firstvds
А в 'public' хранится дата публицации? (подозреваю, что выводятся последние новости с каждого раздела)
Вам нужно избавиться от ORDER BY.
Если у вас такая нагрузка только на одну страницу, то попробуйте создать вспомогательную таблицу и в ней хранить только те новости, которые будут отображаться на этой странице.
Не спец по оптимизации, может это бред).
каким образом выводится 5 новостей, если там LIMIT 0,1?
можно не вызывать запрос 15 раз, а собрать все id категорий в массив, и сделать один запрос:
SELECT * FROM ".$basepref."_news WHERE catid IN (".implode(",",$ArrayWithID).") ORDER BY public DESC LIMIT 0,1Только LIMIT поменять.
И в дальнейшем работать уже с одним полученным массивом без БД.
каким образом выводится 5 новостей, если там LIMIT 0,1?
можно не вызывать запрос 15 раз, а собрать все id категорий в массив, и сделать один запрос:
SELECT * FROM ".$basepref."_news WHERE catid IN (".implode(",",$ArrayWithID).") ORDER BY public DESC LIMIT 0,1Только LIMIT поменять.
И в дальнейшем работать уже с одним полученным массивом без БД.
Извените, а не могли бы вы поподробней? пример можно пожалуйста.
Извените, а не могли бы вы поподробней? пример можно пожалуйста.
Так я вроде и привел пример. Что именно непонятно?