我需要加快此查詢列表最新消息。此查詢運行時間過長(例如,10秒...)如何加快這個MySQL查詢?最新消息查詢
SELECT datas.uid,
datas.message,
datas.date,
CONCAT(conv.first_name, ' ', conv.last_name) AS conversation_name
FROM (SELECT m.message_id,
m.message,
IF (m.from_uid = 1, m.to_uid, m.from_uid) AS uid,
m.readed,
m.sended AS `date`
FROM users u
LEFT JOIN messages m
ON m.from_uid = u.user_id
WHERE m.message_id IN (SELECT MAX(message_id)
FROM messages
WHERE to_uid = 1
OR from_uid = 1
GROUP BY LEAST(from_uid, to_uid),
GREATEST(from_uid, to_uid))) datas
LEFT JOIN users conv
ON conv.user_id = datas.uid
ORDER BY datas.date DESC
LIMIT 5
此查詢使用2個表格(用戶和消息)。 表用戶:
- USER_ID(伯,自動增量)
- 登錄
- 通
- 如first_name
- 姓氏
- ....
表MESSA GES:
- MESSAGE_ID(伯,自動增量)
- from_uid(發送方消息,參照表的用戶 - > USER_ID)
- to_uid(接收器的消息,參照表的用戶 - > USER_ID)
- sended(時間戳)
- 消息(VARCHAR)
EDIT 我添加索引消息: - from_uid - to_uid - sended
,這是不效應...
你對錶格有什麼索引? – Barmar 2014-10-30 10:04:29
我沒有索引...只有主鍵 – user3878395 2014-10-30 10:05:23
所以你希望人們分析你的查詢來得到你想要做的?請描述您的目標,並添加示例數據和預期輸出。你是creatint 2 subselects - 從來沒有好的表現。 – 2014-10-30 10:08:57