Mysql 快速分页数百万页-如何?

Mysql 快速分页数百万页-如何?,mysql,database,pagination,Mysql,Database,Pagination,让我们假设我正在使用MySQL并制作一个书店应用程序,该应用程序显示所有可用书籍的分页列表(其中包含数亿本书籍) 如果我尝试这样的方法: SELECT * FROM `db_table` ORDER BY `title` OFFSET 20.000.000 LIMIT 50 SELECT * FROM `db_table` WHERE `alphabetically_sorted_title_number` > 20.000.000 ORDER BY `title` LIMIT 50

让我们假设我正在使用MySQL并制作一个书店应用程序,该应用程序显示所有可用书籍的分页列表(其中包含数亿本书籍)

如果我尝试这样的方法:

SELECT * FROM `db_table` ORDER BY `title` OFFSET 20.000.000 LIMIT 50
SELECT * FROM `db_table` WHERE `alphabetically_sorted_title_number` > 20.000.000 ORDER BY `title` LIMIT 50
这将花费太多的时间(可能超过10秒,这已经太多了)

为了减少这一时间,我将通过以下方式调整db表架构:

db_table bookstore
    ...
    alphabetically_sorted_title_number = integer field (indexed)
然后我可以像这样查询页面:

SELECT * FROM `db_table` ORDER BY `title` OFFSET 20.000.000 LIMIT 50
SELECT * FROM `db_table` WHERE `alphabetically_sorted_title_number` > 20.000.000 ORDER BY `title` LIMIT 50
这将花费不到1秒的时间 但是如果我想增加一本书呢?如果它的标题以“A”开头,我将不得不更新数千万行,以设置它的
字母顺序\u排序\u title\u编号
(在新书之后必须列出的所有书籍中添加1)
插入性能急剧下降,有没有办法避免或加快插入速度?我听说PostgreSQL可以用它做些什么,是真的吗?

最好是将bd更改为oracle或postgre(免费选项)。postgres的速度与oracle相似,并且与mysql兼容

如果你坚持使用mysql,最好的选择是分割你的搜索。另一个问题是以下内容中的“订购方式”:

如果“标题”不是索引,则很难搜索并减慢搜索结果。 试试这个:

Create index `index_title` ON `db_table`(col) ASC<br><br>

如果您真的有数亿行,您可能需要重新考虑将它们放在单个实例的单个表中……Eugen Rieck,这是一个比其他任何解决方案都好的解决方案吗?oracle或postgre(正如下面的ppl所建议的),它们真的能有所帮助吗?单块RDBMS通常不能很好地按成本扩展,一旦你达到每秒100万行和数千个查询。问题是标题是索引的,因此你的代码在这里是无用的,划分搜索是什么意思?oracle/postgre如何提供帮助?
SELECT * FROM `db_table` WHERE `alphabetically_sorted_title_number` > 20.000.000 ORDER BY `title` LIMIT 50