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

B
На сайте с 23.10.2006
Offline
170
#61

Что показывает PHPMyadmin?Текущее состояние MySQL

полный вывод.

Текущее состояние MySQL

server_status.php

Dweep
На сайте с 11.12.2006
Offline
207
#62

ТС, ответьте, плиз, на пару вопросов:

1. Сколько времени у Вас выполняется такой запрос:

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

2. Как часто в этой таблице изменяются данные ?

Кстати яндекс и гугл не выводит более 1000 результатов в выдаче, вероятно потому что не смогли придумать как эффективно делать подобные запросы.

LEOnidUKG
На сайте с 25.11.2006
Offline
1755
#63
Dweep:
ТС, ответьте, плиз, на пару вопросов:

1. Сколько времени у Вас выполняется такой запрос:
SELECT `id` FROM `cms_freepages` WHERE cat=2 ORDER id DESC LIMIT 37710, 30

2. Как часто в этой таблице изменяются данные ?


Кстати яндекс и гугл не выводит более 1000 результатов в выдаче, вероятно потому что не смогли придумать как эффективно делать подобные запросы.

Я уже всё писал:

1. /ru/forum/comment/10081908

2. 1 раз в час

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Dweep
На сайте с 11.12.2006
Offline
207
#64
LEOnidUKG:
Я уже всё писал:
1. /ru/forum/comment/10081908
2. 1 раз в час

То с этим кодом проблема решена и тема топика исчерпана ?

/ru/forum/comment/10080098

Напишу еще код, который должен быстро к-во ИД в рубриках посчитать, может пригодится.

SELECT `cat` , COUNT( `cat` )

FROM `cms_freepages`

GROUP BY `cat`

LIMIT 0 , 30

LEOnidUKG
На сайте с 25.11.2006
Offline
1755
#65
То с этим кодом проблема решена и тема топика исчерпана ?

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

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

I
На сайте с 23.12.2010
Offline
25
#66
LEOnidUKG:

Можно расписать, что такое "id>" и откуда я его возьму? :)

ваш оригинальный селект

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

вот в нем вы откуда-то берете цифирьки для LIMIT? ну вот фактически точно так же, но используйте ваш id. для первой страницы будет where id > 0 limit 30 , в пхп определили макс id среди этих 30 строчках и передаете его когда юзверь хочет вторую страницу посмотреть и т.д.

это уже 2 раза предлагалось еще до меня

LEOnidUKG
На сайте с 25.11.2006
Offline
1755
#67
вот в нем вы откуда-то берете цифирьки для LIMIT?

Он для ВСЕХ записей, как я ID то найду всех в cat=2? ещё и нужные ID возьму?

Для этого уже netwind предложил вложенный запрос, он выполняется отлично. Прочитайте верхний пост мой :)

sirota77
На сайте с 08.09.2008
Offline
161
#68
iopiop:
вот в нем вы откуда-то берете цифирьки для LIMIT?

Не удержался, сори. В limit не id а порядковый номер записи.

Dweep
На сайте с 11.12.2006
Offline
207
#69

О, я еще вариант придумал:

Раз в час делать запрос вида

SELECT `id`,`cat` FROM `cms_freepages`

Потом до результата применить php функцию rsort(); по ИД

Потом создать php массив ИД для каждой категории

дальше для каждого массива применить функцию array_chunk(рез, 25);

и занести результаты в таблицу с полями:

id cat page listdi , где в поле listdi будет строчкой список ИД статей, которые должны отображаться на странице с соответствующим номером соответствующей категории.

Дальше, когда пользователь вызывает 100-ю страницу со 2-й категорией делаются быстрые запросы к базе, и получается результат.

Минусы - морока с созданием новой таблицы.

Петр Елагин
На сайте с 21.03.2007
Offline
197
#70
LEOnidUKG:
Индексы есть и на id и на cat
Тип базы: myisam

Запросы в основном:

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

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

Решил пока, не давать им бегать дальше 10 страницы, НО... не ну реально что-ли нету никаких вариантов по решению такой задачи?!

Много чего конечно читал, но варианты:
1. Как сделал, ограничить выборку
2. Всё загнать в память (увы, у меня нет столько чтобы держать БД всю)
3. Жестаки новые SSD, чтобы всё летало (увы, нету на серваке)

explain plan SELECT * FROM `cms_freepages` WHERE cat=2 ORDER id DESC LIMIT 37710, 30 в студию

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