mysql中orderby和limit同时使用的bug mysql orderby 优化

官网地址:http://bugs.mysql.com/bug.php?id=32933

以下转载:http://bbs.chinaunix.net/thread-1276235-1-1.html

我的SQL很简单
我想从一个表中检索所有标题含有“中国”的数据,将它们按id排序,取前5条,所以我写了以下语句
SQL语句1:

select fi_id, fi_url, fi_title
from InfoTable
where fi_title like '%中国%'
order by fi_id desc
limit 5

当我只使用order by时,能够返回13条结果
只使用limit时,能够返回其中的5条结果
但是当我同时使用order by和limit时,却返回0条结果

同时我们还发现,这种情况并不是在所有检索词上都会出现,如把检索词由“中国”换为“足球”等就不会出现这种现象。

在和同事的讨论中,有人提出了以下方法
SQL语句2:

select * from
(select fi_id, fi_url, fi_title
from InfoTable
where fi_title like '%中国%'
order by fi_id desc ) a
limit 5

语句2能够正确的得到5条结果

这给了我们一些启发:语句1和语句2的执行并不相同,所以语句1很可能与我们最初设想不符,所以,我们对语句1进行了以下修改
limit 5 ---> limit 50000

得到SQL语句3:

select fi_id, fi_url, fi_title
from InfoTable
where fi_title like '%中国%'
order by fi_id desc
limit 50000

此SQL语句能够正确得到13条结果

mysql中orderby和limit同时使用的bug mysql orderby 优化
由此我们推测:在同时使用order by和limit时,MySQL进行了某些优化,将语句执行逻辑从"where——orderby——limit"变成了"order by——limit——where",导致在某些情况下,同时使用orderby和limit会导致查无结果(或结果数量不足)。具体出现问题与否是与表中数据有关的。

  

爱华网本文地址 » http://www.aihuau.com/a/25101017/332537.html

更多阅读

集成显卡和独立显卡的区别? 独立集成显卡同时使用

集成显卡和独立显卡的区别?——简介集成显卡和独立显卡的区别集成显卡和独立显卡的区别?——方法/步骤集成显卡和独立显卡的区别? 1、独立显卡简称独显,是指成独立的板卡存在,是要插在主板的相应接口上的显卡。独立显卡不用去占用体系内

声卡驱动的安装和调试以及使用技巧 创新声卡调试技巧

声卡驱动的安装和调试以及使用技巧——简介电脑使用的过程中声卡是一个很关键的因素,我们欣赏电影、听音乐、包括玩游戏,声音的品质好坏都是声卡决定的,我们要学会调试声卡和安装声卡,同时也要掌握声卡的使用技巧,这样我们才可以听到高品

凭证中使用红字和负数是根本性的错误 红字发票与负数发票

2011年初,我们写过一篇“关于会计中的红字和负数”,最后有一个结论:在凭证中使用红字和负数是完全错误的。2012年初我们发布了财务系统后,仍然经常有人在讨论这个问题,很多朋友说很难对本公司的会计解释这些,因为在凭证中使用红字和负数是

声明:《mysql中orderby和limit同时使用的bug mysql orderby 优化》为网友谏书稀分享!如侵犯到您的合法权益请联系我们删除