• MySQL的limit用法及优化(转)


    常规用法:

    用法一:

    SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2 OFFSET 1;

    比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取。

    用法二:

    SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2,1;

    而这个SQL,limit后面是从第2条开始读,读取1条信息。

    用法三:

    select * from tablename <条件语句> limit 100,-1

    从第100条后开始-最后一条的记录。

    用法四:

    select * from tablename <条件语句> limit 15

    相当于limit 0,15,查询结果取前15条数据

    用法五:

    MySQL低版本不支持limit offset

    limit offset在MySQL 4.0以上的版本中都可以正常运行,在旧版本的MySQL 3.23中无效

    limit m offset n等价于limit m,n

    limit的优化:

    MySQL的limit给分页带来了极大的方便,但数据量一大的时候,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。这里我具体使用数据分两种情况进行测试。

    (测试环境CentOS 6+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越大,后者越优。

    参考:

    http://www.jb51.net/article/41759.htm(以上内容转自此篇文章)

    http://www.jb51.net/article/85312.htm

    http://www.cnblogs.com/lisqiong/p/5635009.html

    http://blog.csdn.net/cug_jiang126com/article/details/42246721

    http://www.cnblogs.com/beynol/p/mysql-optimization-limit.html

  • 相关阅读:
    让Dreamweaver支持cshtml (MVC Razor环境)
    href="#"与href="javascript:void(0)"的区别
    ASP.NET MVC 4 中Razor 视图中JS无法调试 (重要)
    03011_HttpServletRequest
    1004. 成绩排名 (20)
    1003. 我要通过!(20)
    C语言文件读写命令fprintf和fscanf
    1002. 写出这个数 (20)
    1001. 害死人不偿命的(3n+1)猜想 (15)
    汇编in和out实例解析
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7513973.html
Copyright © 2020-2023  润新知