让我们假设我使用MySQL和制作书店应用程序,它显示所有可用图书分页列表(拥有百年的数百万本图书在它)为数百万页快速分页 - 如何?
db_table bookstore
id = auto incremented primary key
title = character field (indexed)
如果我尝试这样的事:
SELECT * FROM `db_table` ORDER BY `title` OFFSET 20.000.000 LIMIT 50
它会花费太多时间(可能的方式超过10秒,这是太多了)
减少这次我调整db表的模式是这样的:
名db_table bookstore
...
alphabetically_sorted_title_number = integer field (indexed)
,然后我可以查询的网页是这样的:
SELECT * FROM `db_table` WHERE `alphabetically_sorted_title_number` > 20.000.000 ORDER BY `title` LIMIT 50
将需要不到1秒 但如果我想补充一本书吗?如果它的标题以'A'开始,那么我将不得不更新数千万行,以便为它设置alphabetically_sorted_title_number
(将新图书添加到必须列出的所有图书中) 插入性能急剧下降,有没有办法避免这种情况或加快速度?我听说PostgreSQL可以做到这一点,这是真的吗?
如果你真的有数亿行的,你可能要重新考虑其在那些单一实例的单表... – 2014-09-03 10:57:33
Eugen Rieck,是否比其他方法更好?如果oracle或postgre(就像下面提到的那样),他们真的可以帮助吗? – Bob 2014-09-03 14:52:12
单片RDBMS一般不会按成本进行扩展,一旦您达到数百万行和每秒数千次查询。 – 2014-09-03 16:10:12