2011-05-15 67 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应该指向你当前搜索的表中的一个索引(从我可以告诉的内容)。这种方法避免搜索大量记录以找到最近的一个。