MySQL高效分页解决方案共享
复制代码代码如下所示:
选择ID DESC LIMIT 0, 10从内容的顺序
在小数据量的情况下,这样的SQL就足够了,唯一需要注意的问题是确保索引被使用。随着数据量的增加,页面的数量将越来越多,下面的页面的SQL也可能类似:
复制代码代码如下所示:
选择ID DESC LIMIT 10000, 10从内容的顺序
总之,后分页越多,极限语句的偏移量越大,速度越慢。
在这一点上,我们可以通过2种方式:
首先,在子查询的分页方法提高了寻呼效率,和浮动的SQL语句如下:
复制代码代码如下所示:
从内容中选择*(从ID中选择id命令)
为什么会这样因为子查询完成指标,而普通的查询是数据文件做。一般来说,索引文件比数据文件更小,运行效率更高。(通过)它是通过解释SQL语句的查询使用索引找到!
复制代码代码如下所示:
我select_type台式possible_keys关键key_len参考行额外
1主要内容范围小学小学4空6264使用在哪里
2子查询内容索引4空27085空主要使用索引
使用子查询的分页方法的效率比单纯的限制更有效的14-20倍。
二、连接分页方法
复制代码代码如下所示:
从内容中选择*作为t1
JOIN (SELECT ID FROM `content` ORDER BY ID desc LIMIT . ($ page-1)* $ PageSize。
在t1.id
经过我的测试,加入分页和查询效率寻呼基本在一个水平上,而消费的时间基本上是相同的。解释SQL语句:
复制代码代码如下所示:
我select_type台式possible_keys关键key_len参考行额外
1主系统空null空null 1
1主要T1范围小学小学4空6264使用在哪里
2使用索引派生的内容索引空主4 null 27085
三、使用found_rows()函数mysql
MySQL found_rows()函数结合sql_calc_found_rows选择得到的两个结果:
1。得到极限的内容
2。排除界限后的所有行
在SELECT语句,它往往是可能的回报与限行数。有时你可能想知道有多少条线如果你没有限制返回的,但你不想执行同样的语句了。然后,包括在选择查询的sql_calc_found_rows选项,然后执行found_rows()。
复制代码代码如下所示:
选择sql_calc_found_rows * tbl_name其中ID > 100限10;
选择found_rows();
sql_calc_found_rows告诉MySQL记录处理SQL的行数,和found_rows()被记录。虽然它也是两声明,但只有一个主要的查询被执行,所以效率比原来高多了。
1。如果你在前面的语句中使用sql_calc_found_rows选项,found_rows()将返回的行数时返回的第一个语句没有限制。
2。如果sql_calc_found_rows选项不用于以前的说法,found_rows()将返回到以前的说法实际上返回的行数。
如果选择sql_calc_found_rows使用MySQL必须计算所有结果集行数。尽管如此,它总是比一个查询,不再使用极限的速度更快,因为结果集返回到客户端的下降。(此外),它既不能带来的结果集返回,但也因为SQL,如喜欢,不需要更多的疲劳。
复制代码代码如下所示:
-注意以下语句中的条件
选择sql_calc_found_rows * tbl_name,名字像% % > 100限10 ID字符串;
选择found_rows();
复制代码代码如下所示:
-上面的陈述相当于下面的陈述,但是性能方面应该是非常非常明显的改进:
select count(*)从哪里tbl_name名字像% %的字符串;
SELECT * FROM tbl_name,名字像% % > 100限10 ID字符串;