今天在写程序的时候,做分页查找时无意中,将计算数据库查询数量的语句,放到了limit之中,导致出现了bug。

所以发现以下问题:

select count(1) from table limit 0,20; 可以返回正确的结果

select count(1) from table limit 20,40;返回数量为0

当时还半天没想懂为什么,网友一语点醒:count返回的结果只有一个,你的limit 20,40当然没有结果!

突然警醒,是sql语句的执行顺序问题导致的我的理解错误。所以记录一下sql语句的执行顺序问题。

过滤条件由大到小,以下为自己理解。如有错误,请指正:

1.from sql执行的顺序永远第一个时from,只有拿出数据,才能够进行筛选

2.join,链接查询,将多表中的数据进行联接,才能够形成符合条件的数据

3.on,将符合条件的查询,进行第一次筛选,和join合成,以哪个字段为依据,

4.where,最大的条件筛选,

5.group,分组查询,

6.rollup,所得结果集,进行列聚合

7.HAVING,将第五步所得分组,进一步根据having条件进行过滤,例如数量超过50的分组,故必须在group之后

8.select,是在之前的所得结果集选择相应的列,所以要建立在已经筛选过的数据集合

9.distinct,去重,由于由unikey的原因,如果table存在三个字段作为unikey,select其中的两个字段,这时在select之前distinct去重,那么select所得的字段还会有重复数据,所以只有在select之后,才能真正的去重。

10.orderby,排序

11.limit,所有sql,都是最后才执行limit,他对数据集不进行过滤,只是进行截取。

同时查看了以下count函数,count(*),count(1),count(coloumn)三种的区别:

count(1)效率最快,1不代表任何字段,只是代表一个值,返回计数结果,count(2),count(3)的结果也一样,不代表实际意义;

count(*)效率第二快,只不过执行时,会把*翻译成具体字段,进行查询,多了一个翻译的步骤;

count(coloumn)效率最差,他不只是查询数量,而且计数不准确,他会遍历表中每一个该字段,并过滤掉该字段的无效值,返回计数。

mysql 语句执行顺序问题的更多相关文章

  1. Mysql 语句执行顺序

    1.这样一个问题,作为一个开发人员需要掌握数据库的哪些东西?  在开发中涉及到数据库,基本上只用到了sql语句,如何写sql以及对其进行优化就比较重要,那些mysql的厚本书籍针对的是DBA,我们只需 ...

  2. MySQL语句执行顺序

    执行顺序:见:http://www.cnblogs.com/rollenholt/p/3776923.html 下面我们来具体分析一下查询处理的每一个阶段 FORM: 对FROM的左边的表和右边的表计 ...

  3. mysql语句执行顺序图示

  4. 关于sql和MySQL的语句执行顺序(必看!!!)

    今天遇到一个问题就是mysql中insert into 和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及My ...

  5. (转)关于sql和MySQL的语句执行顺序(必看!!!)

    原文:https://blog.csdn.net/u014044812/article/details/51004754 https://blog.csdn.net/j080624/article/d ...

  6. MySQL的语句执行顺序

    MySQL的语句执行顺序 MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作.其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入 ...

  7. 关于sql和MySQL的语句执行顺序

    sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1) from (3) join (2) on (4) where (5) group by(开始使 ...

  8. python 3 mysql sql逻辑查询语句执行顺序

    python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_t ...

  9. mysql优化必知(mysql的语句执行顺序)

    MySQL的语句执行顺序 MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作.其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入 ...

随机推荐

  1. oracle创建包后执行报错:object omgmig.test_package is invalid.

    今天学习了一下oracle的包的写法,然后碰到这么个问题.包声明和包主体都正确,但是就是执行报错:object omgmig.test_package is invalid. 这是会报错的sql,看起 ...

  2. 6. js时间比较

    var v0 = ABS_DATESTRING(O_PARAMETER.FDate,"yyyy/MM/dd")var v_beginTime = v0 + " " ...

  3. jQuery鼠标事件汇总

    鼠标事件是在用户移动鼠标光标或者使用任意鼠标键点击时触发的. 1.click事件:点击鼠标左键时触发 $('p').click(function(){}); 示例: $('p').click(func ...

  4. Egret 压缩与解压(jszip)

    一 jszip是什么 二 为什么要用jszip 三 如果使用zip 一 jszip是什么 jszip 是一个 JavaScript 库,可直接在浏览器上创建 zip 压缩档. 二 为什么要用jszip ...

  5. mysql主从复制的一篇文章(转载)

      管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希 ...

  6. ios category,protocol理解

    category: 向现有的类中增加方法,同时提供方法的实现,现有类不需要做任何改动. protocol:(相当于Java或C#中的接口interface,当很多类都要需要类似的方法,但是方法具体实现 ...

  7. memory allocation

    1 malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符. 2,malloc, 必须 包含头文件<stdlib.h> 3, nt* p_scalar = ...

  8. cell的自适应

    +(CGFloat)getCellHeightWithItem:(FXOwnershipStrutureInfo *)item { if (item.rowH) {//如有rowH就直接返回,避免重新 ...

  9. 把 TBytes 转换为十六进制字符串

    function BytestoHexString(ABytes: TBytes; len: Integer): AnsiString; begin   SetLength(Result, len*) ...

  10. 如何扫描二维码下载APK

    将apk文件放到网站上,即用户可以通过www.xxx.com.cn/abc.apk直接下载 再www.xxx.com.cn/abc.apk这个字符串做成二维码就可以了. 问题: 直接放到网站后,输入下 ...