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)

  • 相关阅读:
    Ynoi 杂题选做
    CSP-S2021 浙江 游记
    P6272 [湖北省队互测2014]没有人的算术
    P5206 [WC2019]数树
    P5405 [CTS2019]氪金手游
    LOJ6679 Unknow
    LOJ3040 「JOISC 2019 Day4」合并
    P6122 [NEERC2016]Mole Tunnels
    三维凸包
    三,四元环计数
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5039991.html
Copyright © 2011-2022 走看看