zoukankan      html  css  js  c++  java
  • MySQL下Limit使用及性能分析

    对于一直用Oracle的我,今天可是非常诧异,MySQL中同一个函数在不同数量级上的性能居然差距如此之大。

    先看表ibmng(id,title,info)  唯一  id key 索引title

    先看看两条语句:

    select * from ibmng limit 1000000,10

    select * from ibmng limit 10,10

    很多人都会认为不会有多大差别,但是他们都错了,差别太大了,(可能机器不同有点差距,但绝对10倍以上)具体执行时间留给好奇的同学。

    这是为什么呢,都是offset的错!

    优化的话你可以想方法减小offset,如以下:

    Select * From ibmng Where id >=(
    Select id From ibmng Order By id limit 1000000,1
    ) limit 10

    大家一定会看到问题, limit 1000000,1 同样offset不是一样大吗,肯定不能优化。(但是,又错了,执行之后才知道结果!)

    原因是id是索引,所有快,那么如下sql呢:

    select id from ibmng where title=’mysql’ order by id limit 1000000,10;

    这条sql大家又会猜错,同样慢的跟蜗牛一样。(在此大家都会想title加了索引啊怎么会这样!)

    接下来大家再执行一条sql如下:

    select id from ibmng where title=’mysql’ limit 1000000,10;

    执行之后你会发现速度是sousou的快!

    原因看出来了吧,都是用了索引的原因,如果你要用select id from ibmng where title=’mysql’ order by id limit 1000000,10; 那么就追加复合索引(title,id )吧!

    注意:接下来与limit无关!

    最后回到我现在的场景,如果千万级别的数据分批次读取统计的话,不要使用limit最好,用主键范围判断最佳!(eg:id<=1001000 and id>=1000001)

  • 相关阅读:
    Arrays常用方法
    一篇很好的java异常框架讲解
    python网络数据采集(低音曲)
    python网络数据采集(伴奏曲)
    记一次python的一些参数
    webshell 生成工具 b374k
    c/s与b/s 动态网站与静态网站 (网站编码统一“UTF-8”)
    RED_HAWK:基于PHP实现的信息收集与SQL注入漏洞扫描工具
    CVE-2017-8464复现 (远程快捷方式漏洞)
    cobaltstrike安装加破解教程+使用教程
  • 原文地址:https://www.cnblogs.com/flish/p/4834907.html
Copyright © 2011-2022 走看看