2012-07-24 70 views
1

让我们假装我有一个巨大的网站和一个巨大的表(有几百万个条目表),有几列(例如“ID”,“AuthorID”,“消息”,“时间” )包含类似twitter的消息。从庞大的表中获取少量排序的记录

我想执行以下简单查询:

SELECT * FROM HugeTable ORDER BY Time DESC LIMIT 1,10; 

该查询应执行了很多次(每秒数十)。我如何确保这个查询速度非常快?

我认为memcached本来可以是一个解决方案,但新帖子的添加速度非常快,而且使用memcached我会向用户提供“旧”消息。

假设我只有一个mysql服务器,它很好,它可以处理所有的流量。

我的问题是,服务器应该把整个表,排序(这里的巨大瓶颈),然后只取前10名。那么,我可以做的最佳优化是什么?分区也许?此外,在表格内部,较新的帖子被放置在底部,所以可以安全地假设新帖子将具有比以前更多的“ID”和“时间”> =。

在此先感谢。 P:我不是MySql的专家(即使我知道基础),但我对NoSql方法毫无头绪。如果您认为NoSql是满足我的任务的方式,那么我可以开始学习使用新的东西:)

回答

3

正如你所猜测的那样,缓存是要走的路。或者通过创建一个包含您想要的十条记录的并行表(每次您插入一个,删除最旧的一个),或者通过在内存中进一步在堆栈中进行相同的操作。这是关于如何管理缓存中的内容。

0

没有回答你的问题,但作为你的问题的答案。我不会使用查询,但会使用websocket解决方案将邮件推送到客户端。连接的客户端在他们到达时总是会收到最新的帖子,并且websockets解决方案应该具有更少的开销。

+0

当你刚到家,需要加载最新的帖子时,该怎么办?你必须等待有人发帖才能真正看到一些东西...... – 2012-07-24 11:42:57

+0

如果帖子非常快速添加,这应该不成问题,但如果你想先显示10个最新帖子,我会使用podiluska建议的缓存。 – Wim 2012-07-24 11:49:32