加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在sqlite SQL语句中结合order by子句使用limit

发布时间:2020-12-12 23:43:22 所属栏目:百科 来源:网络整理
导读:以下两个SQL语句是否始终生成相同的结果集? 1. SELECT * FROM MyTable where Status='0' order by StartTime asc limit 10 2. SELECT * FROM (SELECT * FROM MyTable where Status='0' order by StartTime asc) limit 10 首先,因为StartTime列可能没有UNIQU
以下两个SQL语句是否始终生成相同的结果集?
1. SELECT * FROM MyTable where Status='0' order by StartTime asc limit 10

 2. SELECT * FROM (SELECT * FROM MyTable where Status='0' order by StartTime asc) limit 10
首先,因为StartTime列可能没有UNIQUE约束.因此,即使是第一个查询也可能并不总是产生相同的结果 – 与其本身!

其次,即使从来没有两行具有相同的StartTime,答案仍然是否定的.

第一个语句将始终在StartTime上排序并生成前10行.第二个查询可能会产生相同的结果集,但只能生成一个原始优化器,它不能理解子查询中的ORDER BY是多余的.并且只有执行计划包括此订购阶段.

SQLite查询优化器可能(目前)不是很明亮并且就是这样(不知道真的,我们必须检查SQLite *的源代码).因此,似乎两个查询始终产生相同的结果.尽管如此,依靠它并不是一个好主意.您永远不会知道在SQLite的未来版本中将进行哪些更改.

我认为在任何DBMS中使用LIMIT而不使用ORDER BY是不好的做法.它现在可以工作,但您永远不知道应用程序将使用这些查询多长时间.当SQLite升级或DBMS发生变化时,您可能不在身边.

(*)@ Gareth的链接提供了执行计划,该计划表明当前的SQLite代码足够笨,无法执行冗余排序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读