大家好,阿林来为大家解答以上问题,mysql分页优化,mysql分页很多人还不知道,现在让我们一起来看看吧!
1、MySQL分页方法
2、Mysql的分页似乎一直是个问题。有什么方法可以优化MySQL分页?下面总结一些Mysql分页方法。让我们看一看。
3、方法一:直接使用数据库提供的SQL语句。
4、语句风格:在MySQL中,可以使用以下方法:SELECT * FROM表名LIMIT M,n。
5、适配场景:适用于数据较少的情况(元组百/千)。
6、原因/缺点:全表扫描会很慢,某些数据库结果集会不稳定地返回(例如,一次返回1,2,3,另一次返回2,1,3)。Limit限制从结果集的M位置取出N个输出,其余的被丢弃。
7、2.建立主键或唯一索引,并使用索引(假设每页10个条目)。
8、语句风格:在MySQL中,可以使用以下方法:
9、代码如下:
10、SELECT * FROM id _ PK(pagenum * 10)限制m的表名。
11、适应场景:适用于大数据(数万元组)的情况。
12、原因:索引扫描会很快。有朋友提出,由于数据查询不是按pk_id排序,会出现数据缺失的情况,所以唯一的办法就是方法3。
13、方法3:基于索引重新排序。
14、样式:在MySQL中,可以使用以下方法:SELECT * FROM表名where id _ PK(pagenum * 10)order by id _ PK ASC limit m。
15、适配场景:适用于数据量大(数万元组)的情况。ORDERBY后的列对象最好是主键或唯一的,这样可以通过使用索引消除ORDER BY操作但结果集是稳定的(稳定性的含义见方法1)。
16、原因:索引扫描会很快。但是MySQL的排序操作只有ASC没有DESC(DESC是假的,以后会做真正的DESC,很期待)。
17、4:使用基于索引的prepare(第一个问号表示pageNum,第二个表示每页的元组数)
18、语句风格:在MySQL中,可以使用以下方法:
19、代码如下:
20、prepare stmt _ name from select * from表名其中id_pk(?* ?)按id_pk排序
21、ASC限制M .
22、适应场景:大量数据。
23、原因:索引扫描会很快。prepare语句比一般的查询语句稍快一些。
24、方法:利用MySQL支持顺序操作,通过索引快速定位部分元组,避免全表扫描。
25、例如,读取第1000行到第1019行的元组(pk是主键/唯一键)。
26、代码如下:
27、SELECT * FROM your _ table WHERE PK=1000 ORDER BY PK ASC LIMIT 0,20 .
28、方法6:使用‘子查询/连接索引’快速定位元组,然后读取元组。原因和方法5一样。
29、例如,(id是主键/唯一键,蓝色字体的变量):
30、使用子查询的示例:
31、代码如下:
32、SELECT* FROMyour_table WHEREid=
33、(从您的_表订单中选择
34、BYid desc limit($ page-1)* $ pagesize order BYid desc
35、限制$页面大小
36、使用连接示例:
37、代码如下:
38、SELECT * FROMyour _ table ASt1
39、JOIN(select id from your _ table order by
40、id desc limit($ page-1)* $ pagesize as T2
41、在哪里
42、t1 . id=T2 . id order by t1 . id desc limit $ pagesize;
43、方法7:存储过程类(最好集成上述方法5/6)
44、语句风格:不再给出。
45、适应场景:数据量大,推荐方法。
46、原因:将操作封装在服务器中相对更快。
47、方法八:消极法
48、网上有人撰文使用SQL _ CALC _发现_行。无感,不要模仿。
49、基本上,出于同样的原因,它可以扩展到所有数据库。然而,方法5不能扩展到其他数据库。扩展的前提是其他数据库支持按操作排序,可以直接按索引排序。
本文到此结束,希望对大家有所帮助。