Выборка из БД

12
galaid
На сайте с 13.09.2011
Offline
16
972

Здраствуйте.

Такая ситуация. Есть база данных MySQL, в которой имеется около 20 таблиц, каждая из которых соответствует определенной категории. Структура этих таблиц одинакова:

id|...|data

При чем параметр id уникален только для своей таблицы. Data - дата добавления определенной записи.

Мне нужно на главной странице вывести список, состоящий из n последних записей. Проблема в том, что они могут быть раскиданы по разным таблицам. Дайте совет по решению этой проблемы :confused:

P.S. Можно просматривать все 20 таблиц при выводе, но это ресурсоемкое занятие.

Ragnarok
На сайте с 25.06.2010
Offline
239
#1

если техническая возможность позволяет, я бы сделал отдельную таблицу "last-n-news", в неё записывал данные, параллельно с этими двадцатью таблицами, потом уже выводил последние n из этой одной таблицы.

чистить таблицу можно, например, по крону раз в сутки, оставляя последние n записей

//TODO: перестать откладывать на потом
LEOnidUKG
На сайте с 25.11.2006
Offline
1772
#2

Создайте или HTML или отдельную таблицу и по крону её обновляйте каждые 30 минут из всех 20 таблиц и всё.

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

Я бы на вашем месте сделал представление из всех 20 таблиц. И уже из этого представления кешировал бы как написал LEOnidUKG. Время жизни кеша например 30 мин, если пользователь заходит на сайт, проверяется кэш, если он жив уже более 30 минут , то генерится запрос в базу и записывается новый кэш при это выводя информацию пользователю. Следующий пользователь зайдя уже увидит из кэша инфу.

M
На сайте с 12.11.2005
Offline
122
#4

При добавлении новости в любую таблицу, вставлять её также и в last_news, при этом же удалять самую старую запись. ☝ Это на будущее.

Еще могу сказать, что судя по моим экспериментам с оптимизацией mysql запросов, лучше 20 простых запросов, чем один навороченный.

galaid
На сайте с 13.09.2011
Offline
16
#5

Извиняюсь, забыл указать в первом посте, что помимо вывода первых n записей, также может понадобиться вывод и следующих n записей и т.д.

Ragnarok:
отдельную таблицу "last-n-news"

Рассматривал такую идею, но с учетом того, что я написал выше, получится, что таблица будет довольно большой. Хотя использую этот вариант как запасной.

Если делать так, то получится ограниченное число записей, которое допустимо для вывода:

modelist:
вставлять её также и в last_news, при этом же удалять самую старую запись.

LEOnidUKG, md5by, спасибо, но я не уверен, что это то, что мне нужно

EC
На сайте с 29.11.2010
Offline
73
#6

Сложно сказать т.к. непонятна сама структура БД. я бы сделал сводную таблицу из нех данных которые будут отображаться на главной(сомневаюсь что используются абсолютно все поля). причем создал бы еще одно поле, где бы при добавлении записи, или кроном генерировал уже результирующий HTML. думаю даже если бы таблица оказалась большой - все равно запрос был бы мгновенный если конечно правильно расставить индексы.

galaid
На сайте с 13.09.2011
Offline
16
#7

ex-cept, я тут прикинул, что одновременно на вывод могут понадобиться около 100-200 записей. Если в таблице с последним материалом будет около 2000 записей, то такой вариант мне более подходит.

Хотя все равно продолжаю искать альтернативу.

EC
На сайте с 29.11.2010
Offline
73
#8

:) не проблема у меня в таблице котоло 300тыс записей. одновременно сидящих на сайте 100-150 пользователей в один момент времени.

пока сервер справляется top показывает 0.3-0.7 :)

V
На сайте с 16.03.2009
Offline
133
#9
galaid:
ex-cept, я тут прикинул, что одновременно на вывод могут понадобиться около 100-200 записей. Если в таблице с последним материалом будет около 2000 записей, то такой вариант мне более подходит.

Хотя все равно продолжаю искать альтернативу.

А одним запросом вывести последние записи, не?

VPS XEN/512Mb за 120 Руб (http://www.htc-s.ru/vps-hosting.html) / Виртуальный и VPS хостинг с отзывами (/ru/forum/900361) VPS, хостинг (http://horttel.hosting/)
galaid
На сайте с 13.09.2011
Offline
16
#10
Valmon:
А одним запросом вывести последние записи, не?

С реализацией проблем нет. Тут загвоздка в том, что записи находятся в разных таблицах (читать первый пост).

12

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