[MySQL 5.6优化] -- limit x,x 优化

待优化SQL:

  • 我们来分析下这条SQL存在的问题是什么?
    每条SQL都要进行limit 分页 1000 ,每次SQL扫描的时候都会多扫描出来1000依次类似 每个SQL1+1000+SQl n 1000扫描的行数越来越多,SQL执行越来越慢
  • 那么我们这个时候应该如何进行优化呢?
    1.查看表结构:
  • 接下来看一下SQL:
  • SQL2:SQL1:limit 13000,1000 SQL 2:limit 14000,1000 SQL3 15000,1000 .......
    每次进行limit分页后面就会越来越多,我们怎么优化呢?
    可以进行使用create_time的时候来取,yinw create_time desc 每次取值小于 上次 最后一个分页的值,程序中可以获取到最后一个值
    **改写: **

    NOTE:执行这条SQL的运行结果:与limit 14000, 1000 结果对比是否正确 注意create_time必须要唯一,要不然数据会出错
  • 改写SQL与原始SQL结果对比:

    和使用create_time方式的结果一样正确,那么我们可以利用这种方式进行优化此条SQL
    在SQL还没有较好的索引的时候就已经快了2ms
    那么这个SQL应该如何添加索引呢?
  • 没有添加索引之前的执行计划:

    从执行计划中 Extra 部分有 Using filesort ,而且rows 有将近50w,说明索引选用的选择率不理想;
  • 那么如何添加索引呢?

    添加索引:
    alter table lp_finance add index `idx_a1` (`pay_day`,`pay_platform_type`,`create_time`)
  • 执行时间:

  • 执行计划:

    那么这里面还存在这一个问题:就是type 为 ref
    那么我们来强制索引测试下:

    这个时候需要思考一个问题,为什么不强制的时候,走的也是 idx_a1 type 为ref 呢?强制了之后就是range 呢?
  • 下节分享
  • 总结:
    在当优化limit x,x 。 添加索引是最好的方法,并发量大的时候还是会出现问题,我们应该从根本来解决问题。
    如何解决呢?可以利用传参的形式来优化,因为limit x,x MySQL是不知道从哪里开始,是需要从头开始扫描,直到符合lit的位置进行返回来。
    解决方法:
    1.create_tble
    2.主键
时间: 2024-08-03 16:51:27

[MySQL 5.6优化] -- limit x,x 优化的相关文章

MySQL如何优化LIMIT

MySQL如何优化LIMIT 在一些情况中,当你使用LIMIT row_count而不使用HAVING时,MySQL将以不同方式处理查询. ·         如果你用LIMIT只选择一些行,当MySQL选择做完整的表扫描时,它将在一些情况下使用索引. ·         如果你使用LIMIT row_count与ORDER BY,MySQL一旦找到了排序结果的第一个row_count行,将结束排序而不是排序整个表.如果使用索引,将很快.如果必须进行文件排序(filesort),必须选择所有匹配

mysql优化limit查询语句的5个方法_Mysql

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

mysql查询优化,谁能帮我优化查询啊?我这个太慢了,慢死了

问题描述 mysql查询优化,谁能帮我优化查询啊?我这个太慢了,慢死了 SELECT mobileuserid,caozuoleixing,caozuozhi,xiguanzhi FROM 表A WHERE xiguanzhi>2 GROUP BY mobileuserid,caozuoleixing,caozuozhi,xiguanzhi ORDER BY mobileuserid,caozuoleixing,xiguanzhi DESC LIMIT 3000 解决方案 SELECT dist

MySQL针对Discuz论坛程序的基本优化教程_Mysql

过了这么久,discuz论坛的问题还是困扰着很多网友,其实从各论坛里看到的问题总结出来,很关键的一点都是因为没有将数据表引擎转成InnoDB导致的,discuz在并发稍微高一点的环境下就表现的非常糟糕,产生大量的锁等待,这时候如果把数据表引擎改成InnoDB的话,我相信会好很多.这次就写个扫盲贴吧. 1. 启用innodb引擎,并配置相关参数 #skip-innodb innodb_additional_mem_pool_size = 16M #一般16M也够了,可以适当调整下 innodb_b

MySQL ORDER BY排序语句用法与优化

MySQL Order By语法  代码如下 复制代码  SELECT column_name(s) FROM table_name ORDER BY column_name 注意:SQL语句是"字母大小写不敏感"的语句(它不区分字母的大小写),即:"ORDER BY"和"order by"是一样的. MySQL Order By案例 下面的例子:从"Person"表中选取所有记录,并将"Age"列进行分类

CentOS下MySql 5.0.x的安装、优化及安全设置

下载页面:http://dev.mysql.com/downloads/mysql/5.0.html#downloads 到页面底部,找到Source downloads,这个是源码版本,下载第1个Tarball groupadd mysql 新建一个名为mysql的用户组 useradd -g mysql mysql 在mysql用户组下新建一个名为mysql的用户 gunzip < mysql-VERSION.tar.gz | tar -xvf - 解压下载到的.gz文件 cd mysql-

MySQL数据库性能优化之表结构优化

很多人都将<数据库设计范式>作为数据库表结构设计"圣经",认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求.殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 这是 MySQL数据库性能优化专题 系列的第二篇文章:MySQL 数据库性能优化之表结构优化 系列的第一篇文章:MySQL 数据库性能优化之缓存参数优化

我的MYSQL学习心得(十六) 优化

原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十) 自定义存储过程和函数 我的

mysql 数据量太大,怎么优化一下

问题描述 mysql 数据量太大,怎么优化一下 SELECT dir1.url from dir1 LEFT JOIN dir2 on dir2.url=dir1.url where dir2.id is null or dir1.md5<>dir2.md5 如题,此语句当数据量大的时候会宕机 求助大神帮我想想怎么优化一下 因为我不是做这个的,我只是在c语言一个程序中用到了 然后用我的程序的人说会很慢,而且cpu占用率高 求助帮我优化 解决方案 数据有多大?看看执行计划 找出瓶颈在那里. 解决