這是一個大約需要5-6秒的查詢。內部只需要大約50毫秒。加快使用WHERE ID的查詢IN
SELECT id,messages.to,messages.from,message,datetime,messages.read
FROM messages WHERE id IN( //inside brackets grabs a list of IDs
SELECT max(messages.id) FROM
(SELECT id,messages.from FROM messages
WHERE messages.to = 'username' AND messages.from != 'username'
UNION
SELECT id,messages.to FROM messages WHERE
messages.from = 'username' AND messages.to != 'username')
AS x
LEFT JOIN messages ON messages.id = x.id
GROUP BY x.from)
ORDER BY id DESC
LIMIT 15
這是一個查詢,用於獲取某人最近發送過的消息的用戶列表,以及兩者之間的最後一條消息。我如何改變這個以便它更快?也許沒有ID IN。也許多個查詢?
顯示您的表定義。另外運行'EXPLAIN',這樣你就可以看到每個部件使用的索引。向我們展示'EXPLAIN'的輸出 –
Cfreak
2013-05-02 01:44:09
爲什麼你要對消息進行外連接而不是內連接? – 2013-05-02 01:45:35
您的敘述中說:「某人最近一直在發送消息的用戶列表」,但查詢中沒有任何內容將結果過濾爲「某人」。 – 2013-05-02 01:47:31