2012-01-30 68 views
-3

我有一个庞大的数据库,它有2900万行,并且会随着时间的推移而增长。数据库体系结构非常简单,它包含3列(id,name,datavalue)。由于表格非常简单,我可以选择将此数据库移动到不同的数据库,如MS Sql或Oracle。我遇到的问题是在浏览网页11,000页时需要很长时间才能加载页面。我想知道是否有另一种分页方式或其他产品能更好地工作。哪个数据库可以处理通过数百万行进行分页

我正在使用Mysql中的Limit功能来进行分页。

+3

你最近怎么做你的分页?装载2900万行并丢弃所有的数据,但不管你使用的是什么数据库,你显示的10个数据都会变慢。 – 2012-01-30 17:47:53

+3

既然你没有解释你是如何分页的,我们怎么才能知道“另一种方式”是什么? – RedFilter 2012-01-30 17:48:45

+0

这听起来像是一种EAV情况,这意味着您正在进行大量的联接,这在很多系统中也相对较慢 - 每个系统都会加入成本资源。所有主要的RDBMS都有标准的数据类型,并且几乎可以运行相同的创建脚本(一些注意事项) - 您的“简单”结构在这方面没有帮助。 – 2012-01-30 17:51:29

回答

2

您提到您正在使用LIMIT子句,您是否将此子句与OFFSET子句相结合?分页应该在应用层进行处理,并应该是这个样子:

# Page 1 showing 20 results 
SELECT * FROM `your_table` LIMIT 20; 

# Page 2 showing 20 results 
SELECT * FROM `your_table` LIMIT 20 OFFSET 20; 

# Page 3 showing 20 results 
SELECT * FROM `your_table` LIMIT 20 OFFSET 40; 

- 编辑 -

午餐时我想你的问题,我已经在那里我们类似的项目工作面临类似的问题。我们存储了数百万行,如果有人在没有任何标准的情况下进行搜索,它会从字面上返回数以千计的每行20行的页面,因此我们强迫用户通过搜索表单选择某种类型的搜索条件。通过强制它们进入,即使是看似平淡的搜索细节,我们也可以将匹配行的数量减少数千个,这有助于提高整体性能。

+0

感谢您的回复。雅虎或谷歌搜索引擎我们认为是问题。这是几页,减慢我们的网站。我们实现了javascript页面,因此搜索引擎不会太深入。我相信这可能解决了这个问题。我们将升级服务器内存,以查看在导航到11,000页及以上时是否解决了缓慢问题。我认为服务器只需要热身,但可能没有足够的内存来完成。我会很快看到 – Luke101 2012-01-31 18:31:20

+0

搞笑,我们刚刚遇到同样的问题。机器人以疯狂的请求殴打我们的服务器。如果特定的机器人在$ y时间内超过$ x个请求,我们最终不得不添加一个节流机制来引发503响应。 – 2012-01-31 18:52:38

1

尝试使用mysql的explain功能来帮助您确定查询速度如此之慢的原因。另外看看你的索引,以及你从哪里索引。

在这个页面:

“随着EXPLAIN的帮助下,你可以看到你应该使用索引来查找行,以便执行该语句表中添加索引更快您还可以使用EXPLAIN来。检查优化器是否以最优顺序加入表。“

相关问题