例如,我的表具有以下数据:
id(auto increment) :place :views
1 :test1 :20
2 :test2 :50
3 :test3 :30
我在考虑分页系统。
在对视图进行排序时,我使用此sql。
select * from table order by views desc;
结果如下:
id :place :views
2 :test2 :50
3 :test3 :30
1 :test1 :20
我想使用此数据进行分页。
Page 1:
select * from table order by views desc limit 0, 2;
Page 2:
select * from table order by views desc limit 2, 2;
但是,如果此表中有许多数据,则数据库性能会很懒。
我找到了解决此问题的好方法。
http://www.slideshare.net/Eweaver/efficient-pagination-using-mysql
但是,我的数据没有可排序的ID。
我在寻找任何好主意。
最佳答案
如果
在mytable中是UNIQUE,则要实现有效的“下一页”功能:CREATE INDEX mytable_IX1 ON mytable (views, id);
对于第一页:
SELECT id, place, views
FROM mytable
ORDER BY views DESC, id DESC
LIMIT 2
检索行。如果有完整的两行,则可能会有更多行,因此保留该“最后”行中的
id
和views
值,以用于“下一页”查询。对于下一页,使用从上一页的“最后一行”保存的
id
和views
值:SELECT id, place, views
FROM mytable
WHERE views <= :pp_views AND ( id < :pp_id OR views < :pp_views )
ORDER BY views DESC, id DESC
LIMIT 2
如果获得完整的两行,则可以得到“下一页”,再次使用上一页“最后一行”中的
id
和views
值,查询是完全相同的:SELECT id, place, views
FROM mytable
WHERE views <= :pp_views AND ( id < :pp_id OR views < :pp_views )
ORDER BY views DESC, id DESC
LIMIT 2
尚不清楚为什么这种方法对您不起作用。您可以使用的表格上没有唯一的列吗? (您的问题建议您有一个唯一的(auto_increment)
id
列。)关于mysql - mysql的良好分页性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25816732/
10-12 13:53