今天在写程序的时候,做分页查找时无意中,将计算数据库查询数量的语句,放到了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. AngularJs 简单实现全选,多选操作

    很多时候我们在处理CURD(增删改查)的时候需要实现批量操作数据,这时候就必须使用多选操作. Angular 中实现如下(当然还有很多种比笔者写的更好的方法,这里只是简单的实现.) demo 演示地址 ...

  2. google快捷键

          使用快捷键的好处不言自明,如果能过直接访问google自然有对应的帮助文档以供参考,不过为了方便起见,还是将自己觉得有用的信息收藏到自己访问无障碍的地方吧! 一:以下快捷键适用于Windo ...

  3. win10内网外网智能访问

    当电脑同时连接有线和WiFi时(有线连接为内网,WiFi为外网),会出现内网和外网内容无法同时访问的情况. 本方法实现内网和外网的同时访问. 第一步: 输入指令 “route print ” 查看路由 ...

  4. VMware学习笔记(一)

    vmware核心产品是vSphere,而vSphere主要包括ESXi和vCenterServer. ESXi不依赖其它操作系统OS,安装在每一台物理机上,ESXi是免费的.在ESXi主机上再安装vS ...

  5. Dobbo的继任者?试用微博RPC框架Motan

    从14年开始就陆续看到新浪微博RPC框架Motan的介绍,时隔两年后,微博团队终于宣布开源轻量级RPC框架Motan,项目地址: https://github.com/weibocom/motan/ ...

  6. expdp\impdp及exp\imp

    数据泵文件 expdp介绍 EXPDP命令行选项1. ATTACH该选项用于在客户会话与已存在导出作用之间建立关联.语法如下ATTACH=[schema_name.]job_nameSchema_na ...

  7. Elasticsearch分布式搜索集群配置

    配置文件位于%ES_HOME%/config/elasticsearch.yml文件中,用Editplus打开它,你便可以进行配置.   所有的配置都可以使用环境变量,例如:node.rack: ${ ...

  8. [转]libsvm 训练后的模型参数讲解

    http://blog.sina.com.cn/s/blog_6646924501018fqc.html 主要就是讲解利用libsvm-mat工具箱建立分类(回归模型)后,得到的模型model里面参数 ...

  9. AJAX向服务器发送请求

    使用 XMLHttpRequest 对象的 open() 和 send() 方法: 方法 描述 open(method,url,async) 规定请求的类型.URL 以及是否异步处理请求. metho ...

  10. to_char 详解

    对TO_CHAR的讨论可以分为从两种类型的数据到字符的转换:DATE和NUMBER. TO_CHAR函数返回VARCHAR2数据类型的值. 1. NUMBER TO CHAR 语法: TO_CHAR( ...