|
|
|
| Всем привет!
Поставили задачу, сделать так сказать систему диалога пользователей.
Сделал базу
id, for_user, from_user, message, date
И вот такой запрос
SELECT `id`, `message` FROM `user_friends_message` WHERE (`for_user` = 1 AND `from_user` = 2) OR (`for_user` = 2 AND `from_user`=1) ORDER BY `date` DESC LIMIT 100
Индексы в базе, сделать не удаётся, не индексируется((
В принципе, всё работает кооректно и нормально, хоть EXPLAIN и выдаёт filesort.
Но вот если в таблице много записей более 1000 - 2000 то запрос получается долгий и на мускул идёт довольно большая нагрузка.
Может кто то из вас, делал что то подобное и поделится советами, как можно оптимизировать или сделать более лучше и корректно? | |
|
|
|
|
|
|
|
для: Diablo_
(11.05.2010 в 03:46)
| | Индексы в базе, сделать не удаётся это почему? | |
|
|
|
|
|
|
|
для: oliss
(11.05.2010 в 03:57)
| | Не в том смысле, что не получается, а в том что они особой роли не играют!
Что с индексами что без них всё равно EXPLAIN показывает filesort но да, скорость запроса увеличивается, но всё равно не на много! | |
|
|
|
|
|
|
|
для: Diablo_
(11.05.2010 в 04:07)
| | А вам это
(
`for_user` = 1 AND `from_user` = 2
) OR
(
`for_user` = 2 AND `from_user`=1
)
|
не кажется чуть странным
кроме того, вы понимаете работу LIMIT (что происходит при запросе) ?
EXPLAIN показывает filesort
| а как вы думаете почему? | |
|
|
|
|
|
|
|
для: oliss
(11.05.2010 в 04:29)
| | 1. странным может и кажется, но не нашёл других, более оптимальных вариантов для того, что бы выбрать сообщения которые юзер отправил мне и я ему!
2. потому что order by date desc. Но если бы индекс сработал верно и полноценно то EXPLAIN показал бы using where. Или я не прав? | |
|
|
|