MySQL笔记-语句的执行顺序
在一次查询线上问题时发现有以下两条同样的SQL,执行后数据的顺序不一样:
SELECT * FROM nns_assists_item AS asset WHERE asset.nns_assist_id='mgtv' AND asset.nns_category_id LIKE '1000003%' AND (asset.nns_tag='' OR ISNULL(asset.nns_tag) OR LOCATE(',26,',CONCAT(',',asset.nns_tag))>0) AND asset.nns_check=1 GROUP BY asset.nns_video_id ORDER BY asset.nns_create_time DESC ,nns_release_time DESC,nns_id DESC LIMIT 0,4;
SELECT * FROM nns_assists_item AS asset WHERE asset.nns_assist_id='mgtv' AND asset.nns_category_id LIKE '1000003%' AND (asset.nns_tag='' OR ISNULL(asset.nns_tag) OR LOCATE(',26,',CONCAT(',',asset.nns_tag))>0) AND asset.nns_check=1 GROUP BY asset.nns_video_id ORDER BY asset.nns_create_time DESC ,nns_release_time DESC,nns_id DESC LIMIT 0,10;
两条SQL除了后面的limit限制条件不同以外都是一样的。
执行出的数据顺序不同只能在数据量大的时候会出现。
最后在了解了MySQL语句的执行顺序之后,大概猜到了为什么出现这样的问题。
MySQL的语句执行顺序是

这两条SQL使用group by来做排重然后在使用order by来做一次排序。
在我的理解中,产生这个问题的原始是这样的:group by时本身也会做一个分组内的排序,我们的业务中分组依据是nns_video_id,这个字段的值是guid字符串。我认为在分组时的排序时guid字符串的排序在大量数据时出现了不准确的情况。
根据语句的执行顺序我们知道,无论我们如何修改后面order by的条件都是不可能让两者的顺序一致的,我的解决方法是在group by中再添加一个分组条件。
MySQL笔记-语句的执行顺序的更多相关文章
- mysql查询语句的执行顺序(重点)
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- MySQL——sql语句的执行顺序
#核心知识点: 书写顺序:where——>group by——>having——>order by——>limit 许多时候在书写一些复杂的sql语句的时候,尤其是在渐进式推导 ...
- MySQL Select语句的执行顺序
源文章:How is a query executed in MySQL? 当执行SQL的Select查询语句时,SQL指令的执行顺序如下: FROM 子句 WHERE 子句 GROUP BY 子句 ...
- mysql 查询语句的执行顺序(重重点)
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
- {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析
MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...
- mysql 中sql语句的执行顺序
今天突然想起来,之前面试一个很牛逼的公司(soho)的时候,一个美眉面试官,面试的时候问到了很多之前都没有意识到的问题,回想起来那美眉看着年纪不大,技术那是真666啊.好了说一下人家问的这个有关mys ...
- 浅谈SQL优化入门:1、SQL查询语句的执行顺序
1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...
- mysql 中sql的执行顺序
文章转自 https://www.cnblogs.com/annsshadow/p/5037667.html https://www.cnblogs.com/yyjie/p/7788428.html ...
- mysql join语句的执行流程是怎么样的
mysql join语句的执行流程是怎么样的 join语句是使用十分频繁的sql语句,同样结果的join语句,写法不同会有非常大的性能差距. select * from t1 straight_joi ...
随机推荐
- Codeforces 725B Food on the Plane
B. Food on the Plane time limit per test:2 seconds memory limit per test:256 megabytes input:standar ...
- 2017ecjtu-summer training #7 POJ 2689
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18731 Accepted: 5006 D ...
- angular $modal模态框
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- spring自带定时器
http://www.cnblogs.com/pengmengnan/p/6714203.html 注解模式的spring定时器1 , 首先要配置我们的spring.xmlxmlns 多加下面的内容. ...
- UEP-时间的比较
时间的比较: var rec = ajaxform.getRecord(); var sd = rec.get("startDate"); var ed = rec.get(&qu ...
- ==和equals详解+例子
一开始遇见==和equals我也是分不清,后来看了很多博客,收益匪浅, 担心以后给忘了,所以写下这个,以后复习可以用. (有哪里写得不对的,希望可以留言帮忙改进,大家一起共同进步) 一.Java数据类 ...
- 使用layui-tree美化左侧菜单,点击生成tab选项
layui-tree美化左侧菜单 html <div class="layui-side layui-bg-black"> <div class="la ...
- Spring+redis整合遇到的问题集以及注意事项
redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- Js DOM 详解
DOM事件类 基本概念 DOM事件的级别 1.DOM0 element.onclick = function(){} 2.DOM2 element.addEventListener("cli ...
- BIGIP-LTM中的NAT和SNAT
http://250688049.blog.51cto.com/643101/1095880 一.NAT(Network Address Translation)网络地址转换1.NAT简介 NAT ...