Leonid
PHP? нет, не слышал...
Есть таблица messages, содержащая сообщения между пользователями сайта:
id
date_time
from_user (int)
to_user (int)
content (text)
readed (tinyint)
сделаны индексы from_user, to_user и from_user+to_user
сообщений уже более 2 млн, таблица вместе с индексами занимает порядка 400 мб.
наиболее частые запросы - получить последние сообщения между двумя пользователями, и число непрочитанных сообщений для определенного пользователя:
select * from messages where (from_user = user1 and to_user = user2) or (from_user = user2 and to_user = user1) order by id desc limit 30
select count(*) as cnt from messages where to_user = user1 and readed = 0
иногда запросы выполняются быстро, менее 0.01 сек, а иногда порядка 0.5 - 2 секунд. И это естественно сильно подтормаживает сайт. Дело в размере таблицы, или можно что-то оптимизировать? Переходить на более мощный сервер или разделять таблицу, отправлять старые данные, например старше года в архив?
id
date_time
from_user (int)
to_user (int)
content (text)
readed (tinyint)
сделаны индексы from_user, to_user и from_user+to_user
сообщений уже более 2 млн, таблица вместе с индексами занимает порядка 400 мб.
наиболее частые запросы - получить последние сообщения между двумя пользователями, и число непрочитанных сообщений для определенного пользователя:
select * from messages where (from_user = user1 and to_user = user2) or (from_user = user2 and to_user = user1) order by id desc limit 30
select count(*) as cnt from messages where to_user = user1 and readed = 0
иногда запросы выполняются быстро, менее 0.01 сек, а иногда порядка 0.5 - 2 секунд. И это естественно сильно подтормаживает сайт. Дело в размере таблицы, или можно что-то оптимизировать? Переходить на более мощный сервер или разделять таблицу, отправлять старые данные, например старше года в архив?