2011-05-15 50 views
3

我有一個表不斷地插入各種用戶名。我有一個用戶可以加載的頁面,顯示他們發佈的數據庫中最新的條目。MySQL - 根據用戶名查詢最近的輸入 - 非常慢

我使用的查詢的示例:其中,username = '用戶' ORDER BY entry_id DESC LIMIT 1

有在表2列索引SELECT時間戳FROM entry_list:用戶名,時間戳。根據EXPLAIN查詢這個索引被使用,具有以下的附加信息:

SELECT_TYPE:SIMPLE
類型:REF
key_len:34
REF:常量
行:5654
額外:使用其中;使用索引;使用filesort

如何優化我的查詢?單個用戶(0.2〜0.4秒)的速度相當快,但有些帳戶一次加載5,10甚至20個不同用戶的這些信息。即使0.2〜0.4似乎有點長,當它最終減慢了4-8秒的頁面加載時,這是不可接受的。

回答

2

嘗試SELECT MAX(timestamp) FROM entry_list WHERE username = 'user'

還,可能不是最好的主意,用保留的關鍵字作爲列名,嘗試改變timestampinsert_date或類似的東西

+0

謝謝!這一變化使得它在不到0.01秒的時間內加載了一個有20個賬戶的用戶! – 2011-05-15 17:06:00

+0

沒問題,很高興我能幫上忙 – Ascherer 2011-05-15 17:08:02

0

您可以添加一個字段到用戶表last_query_id。然後,只需在他們進行新查詢時更新此字段。 last_query_id應該指向你當前搜索的表中的一個索引(從我可以告訴的內容)。這種方法避免搜索大量記錄以找到最近的一個。