linux mysql 不稳定_linux,mysql:今天写出一个十分弱智的bug!
今天写出一个十分弱智的bug,记录一下,提醒自己以后别这种犯错,不怕丢人哈~
在写一个分页查询记录的sql时,要根据添加的时间逆序分页输出,之前的写法是酱紫:
select
record.a, y.c from ( select
a,b from x
order by timestamp desc
limit 0,10 ) record
left join y
on record.b = y.d;
因为一些新的需求,要在后面加一些where条件,limit操作不能在嵌套查询里面加了,于是乎把limit 0,10提出来放到最外面,结果order by还留在里面。
我当时想嵌套查询出来的record表已经按timestamp字段逆序排列了,再left另一张表,最终再limit出来的结果应该也是逆序的,但结果却很打脸,是正序的。
首先控制变量,代码回滚到之前,把后来加的各种逻辑都去掉,还原到上述sql,只把limit 0,10移到最后,发现timestamp是正序的,那么问题应该就出在这里了,与后来加的其他逻辑没有关系。
那么再试一下删掉limit操作,结果timestamp是无序的!
这不可能啊,于是认真看了下数据,发现一些规律,可能是按y表的自增id或created_at时间字段排序的(因为这两个字段是索引字段),那么到这里,我们至少可以得到一个简单的结论,就是联表查询结果,不是按照嵌套查询中的order by排序的,现在正向一看,确实不可能按这个排序,因为括号里面的逻辑对括号外是不可见的。
还有个问题,上述去掉limit后,最终不是按left join主表的顺序输出,按照我们常理想象,mysql是循环主表的记录去关联另一张表,那么输出的顺序应该还是主表的顺序啊,但结果却是按另一张表的字段排序的,这又是为什么呢?图解 5 种 Join 连接这篇推荐大家看下。
去官方手册中找找线索,发现order by模块中有这么一句话。
再去limit模块中看一下
从以上两个截图中,我们可以发现一些端倪,limit操作会对查询有一些优化,查询到指定条数的数据,就可以提前结束了,比如我们本文中的left操作,拿到10条结果就结束查询线程,返回客户端。
我猜测,如果没有limit操作,反正全部都要join,可能mysql会对循环逻辑做一些优化,不一定要按主表来循环,思想类似于java编译中的重排序,也对应了上面截图中的那句话。
采用最简单、最粗暴的方式,直接把order by 和 limit操作放到最外面就ok啦,其实效率上并没有什么降低,只要索引建的合理即可。
相关文章:

IOS XML解析
<?xml version "1.0" encoding "utf-8"?> <video>小黄人</video> <video></video> <video/> <videos> <video> </video> </videos> 不能相互嵌套。 xml中的所有空格和空行都会当成字符来…

BAT架构师分享之:大型网站技术架构
早期的网站为了节省成本一般会设计成集中式系统,应用程序、数据库等都部署在一台服务器上。 但随着业务的快速度发展,逐渐出现瓶颈,按一定原则**(应用拆分、服务拆分、数据拆分、应用解耦)**,向分布式系统转…

mysql isreg_`Innodb` MySQL中如何优雅的删除大表跑路
最近很想写写MySQL相关的内容,就从这个话题出发吧有人说删MySQL表谁不会不就是drop table TABLENAME如果在生产环境中,你对一张TB级别的大表,敲下这行命令那么你的主管,大主管,隔壁的大主管 就会气势汹汹的冲向你其原因…

常用正则表达式集锦
链接地址:http://blog.csdn.net/tjcyjd/article/details/48416405 验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$验证m-n位的数字:^\d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验…

C(第一个C程序) 和 C++ (第一个C++程序)对比碰撞
个人博客首页(点击查看详情) -- https://blog.51cto.com/11495268 1、简介 C 是对 C 的继承、扩展,但从语言角度来说,这是 两种变成语言,就一定存在不同,本文 就借助于 C、C 的 最精简标准程序 进行对比…

java的byte与C#的异同引起的字符处理问题。
java的byte是有符号类型(java就没有无符号类型的数据),值域:-0128~127 c#的byte是无符号类型数值,值域:0~255 这在依赖字符编码处理程序中,两者源代码就不能通用了。 知道原因结局办法就容易多了。 1.使用&与运算 …

exec不同文件l怎么汇总_ABAQUS常见问题汇总 - 2.0版.doc
您所在位置:网站首页 > 海量文档 > 计算机 > C/C资料ABAQUS常见问题汇总 - 2.0版.doc154页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性,…

1月12号 UIView
UIView 1.为什么要UIView .可以用UIView作为容器,存放子视图 .管理事件UIEvent 2.ios坐标系 以左上角为坐标原点,向右边是x的正方向,向下是y的正向方 bounds: 相对于视图本身而言(0,0,w, h) fra…

小虎计算器-技术支持
2019独角兽企业重金招聘Python工程师标准>>> 最简单的计算器,包含历史记录 转载于:https://my.oschina.net/u/1405818/blog/3050764

jquery即时搜索查询插件jquery.search.js
jquery.search.js搜索插件是一款基于jquery的插件,任何一个input输入款均可即时转为查询框,可分为前台数据直接显示和后台传输数据显示两种方案! 文档说明:http://www.sameus.com 代码下载地址: http://code.google.com/p/17sameus/downloads/list 使用方式 jquery.search.js插…

node mysql 批量写入_请问如何使用node.js在MySQL中进行批量插入
catspeake我四处寻找关于批量插入对象的答案。Ragnar123的回答使我得出了这样的结论:function bulkInsert(connection, table, objectArray, callback) {let keys Object.keys(objectArray[0]);let values objectArray.map( obj > keys.map( key > obj[key]…

win10 UWP 应用设置
win10 UWP 应用设置 简单的把设置需要的,放到微软自带的LocalSettings LocalSettings.Values可以存放几乎所有数据 如果需要存放复合数据,一个设置项是由多个值组成,可以使用ApplicationDataCompositeValue将多个合并。 存放一个string strin…

通过loganalyzer展示数据库中的日志
目的:通过loganalyzer展示数据库中的日志 准备环境: CentOS7_1:用来生成日志 CentOS7_2:用来存放日志的数据库 CentOS7_3:LAP服务器 第一步:在CentOS7_2安装mysql数据库 此处使用二进制安装mariadb…

libmemcached 1.0.11 发布
libmemcached 1.0.11 删除了 memcached 的定制版本,更新了硬化(hardening)规则,修复了 socket 连接返回错误的问题。 libmemcached是C客户端到memcached服 务器的接口库。具有低内存占用率、线程安全、并提供对memcached功能的全面支持。它还采用多种命令…

python描述器做权限控制_Python装饰器14-描述器
描述器这是Python一个重要的概念,英文名:Descriptordescriptor是对象的一个属性,只不过它存在于类的dict中并且有特殊方法get(可能还有set和__delete)而具有一点特别的功能,为了方便指代这样的属性,我们给它起了个名字叫descripto…

数据结构(1)有序表查找
有序表查找 /* 主函数 */public class OrderTableSearch {public static void main(String[] args) {int [] a {0,1,16,24,35,47,59,62,73,88,99}; System.out.println(FibonacciSearch(a, 10, 88));System.out.println(InsertKeySearch(a, 10, 88));System.out.println(Bina…

Java实现MD5(32/16位大小写)加密
MD5简单介绍 大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”…

OD使用教程6 - 调试篇06|解密系列
OD使用教程6 - 调试篇06 让编程改变世界 Change the world by program 这一讲开始,小甲鱼带大家接触真正程序的逆向。其实也没啥大不了的,也就是对之前所学的知识进行巩固和加强。 不过,在每一节课中,小甲鱼都会教给大家不同的新…

宝塔面板 mysql装不上_宝塔面板强制安装mysql8.0
释放双眼,带上耳机,听听看~!mysql终于更新到8.0,mysql8.0对比以往的版本有了很大的提升,但是要求的服务器配置也就变得越来越高。对于低配置服务器,在宝塔面板进行安装时,总会出现“至少需要2个…

android studio 怎么运行java
方法/步骤 1、新建一个project,或者如果已经有project的话,那就直接新建一个module.注意选择Java library,然后下一步 2、输入module的一些信息。点击finish 3、在左侧找到build.gradle,双击打开,参照图中修改一下配置…

运行PHP出现No input file specified错误解决办法
配置了一台新服务器,使用的是IIS Fastcgi PHP 5.3.X,访问php页面的时候就会报错“No input file specified” 在php.ini文件里面修改: 1、增加一行(这个最重要) fastcgi.impersonate 1 2、修改两项(解开…

Microsoft Security Essentials 4.1.522.0 RTM
简单说一下新版本的新功能,其中最强的是云端修复系统受损或病毒感染文件功能、重新编写的网络检查系统防御病毒入侵、新增自我保护,后台监控主进程无法用任务管理器结束。 Microsoft Security Essentials 是 Microsoft 提供的免费杀毒下载软件࿰…

wincc vbs mysql_Wincc VBS操作txt及SQL2005
系统:Win7 32Bits 旗舰版wincc: 7.0 sp3英文版Dim strConnectionStringDim objConnectionDim objCommandDim strSQLDim RsDim sdayDim smonthDim edayDim emonthDim str1Dim str2Dim tempDim sqlwhereDim msgDim CDG, WSH, FilePathDim fso, fo, slDim read_tempDim OrderFileN…

[Python]网络打解包
Python与C、C交互的时候,如果进行网络消息的收发,需要讲数据打包解包为字节流。 这时候就会用到Struct模块中的pack、unpack函数 打包: PKG # ! means network byte#PkgHeadPKG pack(!i, 0x54434d) #intPKG pack(!H, 4) #us…

TiKV 成功晋级 CNCF 孵化项目
今天,CNCF(Cloud Native Computing Foundation,云原生计算基金会)技术监督委员会(TOC)宣布已经投票决议通过,正式将 TiKV 从沙箱项目晋级至孵化项目。 TiKV 是一个开源的分布式事务 Key-Value 数…

平均符号熵的计算公式_交叉熵(Cross Entropy)从原理到代码解读
交叉熵(Cross Entropy)是Shannon(香浓)信息论中的一个概念,在深度学习领域中解决分类问题时常用它作为损失函数。原理部分:要想搞懂交叉熵需要先清楚一些概念,顺序如下:1.自信息量—>2.信息熵(熵)—>3.相对熵(KL散度)—>…

在 Ubuntu 配置 PPTP Server
本文在 Ubuntu 12.4 或 14 亲测有效。 建立 PPTP 服务器 首先安装 pptp 服务器。 # apt-get install pptpd 然后配置 pptpd。 # sudo vi /etc/pptpd.conf 在 pptpd.conf 文件末尾添加服务器 IP 和客户端 IP。 localip 192.168.3.1 remoteip 192.168.3.100-200 以上配置意味着服…

IAP超级详解,偷懒了,不用自己去翻译了
转载自:http://gaohaijun.blog.163.com/blog/static/176698271201143194018328/ 一、In App Purchase概览 Store Kit代表App和App Store之间进行通信。程序将从App Store接收那些你想要提供的产品的信息,并将它们显示出来供用户购买。 当用户需要购买某件…

linux负载均衡(什么是负载均衡)
linux负载均衡(什么是负载均衡) 一、总结 一句话总结: 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 关键点一:…

win8数据源设置mysql_Win8系统ODBC数据源有何重要功能?
对计算机发展比较有研究的朋友一定会知道ODBC,它是一个比较古老的东西,发展到现在Win8系统上版本已经是3.8了。微软虽然没有对ODBC做很大的更新,但是正因为ODBC是一个比较成熟和古老的规范,因此它的作用才显得不那么突出ÿ…