mysql limit分页优化方法分享

MySQL的优化是非常重要的。其他最常用也最需要优化的就是limit。MySQL的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。

同样是取10条数据
  select * from yanxue8_visit limit 10000,10 和
  select * from yanxue8_visit limit 0,10
  就不是一个数量级别的。
  网上也很多关于limit的五条优化准则,都是翻译自MySQL手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。
  文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033+p4双核 (3GHZ) +4G内存 MySQL 5.0.19)
  1、offset比较小的时候。
  select * from yanxue8_visit limit 10,10
  多次运行,时间保持在0.0004-0.0005之间
  Select * From yanxue8_visit Where vid >=(
  Select vid From yanxue8_visit Order By vid limit 10,1
  ) limit 10
  多次运行,时间保持在0.0005-0.0006之间,主要是0.0006
  结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。
  2、offset大的时候。
  select * from yanxue8_visit limit 10000,10
  多次运行,时间保持在0.0187左右
  Select * From yanxue8_visit Where vid >=(
  Select vid From yanxue8_visit Order By vid limit 10000,1
  ) limit 10
  多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。
  以后要注意改正自己的limit语句,优化一下MySQL了

mysql limit分页优化方法分享

时间: 2024-08-05 00:38:16

mysql limit分页优化方法分享的相关文章

mysql limit分页优化

近期一个项目遇到mysql limit分页奇慢无比,查看了数量也就一百万左右,可是查询的一页数据需要两分多钟,sql语句大约是order by limit,网上的优化大概都是在索引,优化子查询这类,都一一试过,速度并没有大的提升. 后来脑洞大开,是不是order by的问题,想想一百万条数据排序应该也是很耗时间的,于是将order by删除了,果然两分半钟竟然缩短到了0.045秒.经过测试如果是单个表的查询,order by 对速度的影响不太明显,当查询和关联和子查询的时候,对速度的影响就显而易

数据库调优教程(十三) MySQL数据库其他优化方法

六.           MySQL数据库其他优化方法 最后一章,谈谈前面没有涉及的一些优化方法. 1.      My.ini配置文件 这里只介绍两个最重要的,其他的不过多介绍. 1)    配置 最大连接数 默认为100,建议设为1000 2)   配置 缓存 在my.ini的[mysqld]节点开启查询缓存,配置如下 query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576 2.      使

limit 百万级数据分页优化方法

mysql教程 这个数据库教程绝对是适合dba级的高手去玩的,一般做一点1万 篇新闻的小型系统怎么写都可以,用xx框架可以实现快速开发.可是数据量到了10万,百万至千万,他的性能还能那么高吗? 一点小小的失误,可能造成整个系统的改写,甚至更本系统无法正常运行!好了,不那么多废话了. 用事实说话,看例子:数据表 collect ( id, title ,info ,vtype) 就这4个字段,其中 title 用定长,info 用text, id 是逐渐,vtype是tinyint,vtype是索

正确使用索引(sql优化),limit分页优化,执行计划,慢日志查询

查看表相关命令 - 查看表结构   desc 表名- 查看生成表的SQL   show create table 表名- 查看索引   show index from  表名 使用索引和不使用索引 由于索引是专门用于加速搜索而生,所以加上索引之后,查询效率会快到飞起来. # 有索引 mysql> select * from tb1 where name = 'zhangqiye'; +-----+-------------+---------------------+--------------

MySQL的分页优化

mysql的分页比较简单,只需要limit offset,length就可以获取数据了,但是当offset和length比较大的时候,mysql明显性能下降 1.子查询优化法 先找出第一条数据,然后大于等于这条数据的id就是要获取的数据 缺点:数据必须是连续的,可以说不能有where条件,where条件会筛选数据,导致数据失去连续性 实验下 Sql代码   mysql> set profiling=1; Query OK, 0 rows affected (0.00 sec) mysql> s

MySQL的一些优化方法

1.Max的优化 如果没有索引,max需要检索所有行才能得出结果,这里可以通过建立索引的方式进行优化: CREATE INDEX idx on products(price); 在products表中对price建立索引 这样,再查询price的最大值就能迅速得出结果. 2.子查询的优化 下列子查询: SELECT id, name, price FROM products WHERE products.id IN (SELECT prod_id FROM vendors); 可以用join方法

MySQL中怎么将LIMIT分页优化?

1.语法: *** limit [offset,] rows 一般是用于select语句中用以从结果集中拿出特定的一部分数据. offset是偏移量,表示我们现在需要的数据是跳过多少行数据之后的,可以忽略:rows表示我们现在要拿多少行数据. 2.栗子: ①select * from mytbl limit 10000,100 上边SQL语句表示从表mytbl中拿数据,跳过10000行之后,拿100行 ②select * from mytbl limit 0,100 表示从表mytbl拿数据,跳

Mysql limit性能优化(小offset与大offset)

MySQL的优化是非常重要的.其他最常用也最需要优化的就是limit.MySQL的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降. 同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是一个数量级别的. 网上也很多关于limit的五条优化准则,都是翻译自MySQL手册,虽然正确但不实用.今天发现一篇文章写了些关于limit优

Mysql 查询分页优化

全表扫描,速度极慢 limit 语句的查询时间与起始记录的位置成正比 MySQL 的 limit 语句是很方便,但是对记录很多的表并不适合直接使用?创建测试表: DROP TABLE IF EXISTS `t_user`; CREATE TABLE `test`.`t_user`( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(200) NOT NULL DEFAULT '', PRIMARY KEY (`id