我有一个 MySQL 数据库和一个大约 128,000 行的表(据我了解,这非常小)。我还有一个连接到它的应用程序,它被设置为进行分页。我的 SQL 查询如下所示:
SELECT * FROM Documents WHERE PortfolioId = ? LIMIT ?,?
SELECT * FROM Documents WHERE PortfolioId = ? ORDER BY Date DESC LIMIT ?,?
我的问题是双重的。首先,无论使用哪个查询,第一个“LIMIT”数字越高,查询返回越慢,最终进入不可接受的延迟。例如,如果我去 phpmyadmin 并执行:
SELECT * FROM Documents WHERE PortfolioId = 1 LIMIT 0,20
查询需要 0.001 秒。但是,当我执行此操作时:
SELECT * FROM Documents WHERE PortfolioId = 1 LIMIT 120000,20
查询需要 14.8 秒。
我的第二个问题是,我按日期排序的第二个查询(也在表中被索引)使相应的查询花费了很多很多的时间(第一个示例为 0.1 秒, 第二个示例为2 分 23 秒)。
有没有更好的方法来执行这些查询,所以它们更快?据我了解,开发人员经常在具有数百万行的表上实现分页,但是这样做会导致后面的页面加载需要很长时间。