当前位置:  开发笔记 > 后端 > 正文

Sqlite LIMIT/OFFSET查询

如何解决《SqliteLIMIT/OFFSET查询》经验,为你挑选了3个好方法。

我对Sqlite有一个简单的问题.这有什么区别:

Select * from Animals LIMIT 100 OFFSET 50

Select * from Animals LIMIT 100,50

Bill Karwin.. 254

这两种语法形式有点混乱,因为它们反转了数字:

LIMIT , 

相当于:

LIMIT  OFFSET 

它与MySQL和PostgreSQL的语法兼容.MySQL支持两种语法形式,其文档声称使用OFFSET的第二种语法旨在提供与PostgreSQL的兼容性.PostgreSQL 文档显示它只支持第二种语法,而SQLite的文档显示它支持两者,推荐第二种语法以避免混淆.

顺便说一句,在没有首先使用ORDER BY的情况下使用LIMIT可能并不总能为您提供所需的结果.实际上,SQLite将按某种顺序返回行,这可能取决于它们如何物理存储在文件中.但这并不一定意味着它按照你想要的顺序排列.获得可预测顺序的唯一方法是显式使用ORDER BY.



1> Bill Karwin..:

这两种语法形式有点混乱,因为它们反转了数字:

LIMIT , 

相当于:

LIMIT  OFFSET 

它与MySQL和PostgreSQL的语法兼容.MySQL支持两种语法形式,其文档声称使用OFFSET的第二种语法旨在提供与PostgreSQL的兼容性.PostgreSQL 文档显示它只支持第二种语法,而SQLite的文档显示它支持两者,推荐第二种语法以避免混淆.

顺便说一句,在没有首先使用ORDER BY的情况下使用LIMIT可能并不总能为您提供所需的结果.实际上,SQLite将按某种顺序返回行,这可能取决于它们如何物理存储在文件中.但这并不一定意味着它按照你想要的顺序排列.获得可预测顺序的唯一方法是显式使用ORDER BY.


`LIMIT OFFSET `更清楚.谢谢.

2> Nick Dandoul..:

后者是一种替代语法,但有一点需要注意:

如果使用逗号而不是OFFSET关键字,则偏移量是第一个数字,限制是第二个数字.这种看似矛盾是有意的 - 它最大限度地提高了与传统SQL数据库系统的兼容性.



3> Kalanj Djord..:

我做了一些测试,性能没有差别.

这只是为了与其他sql语言兼容.

两个版本的运行时间相同.

我用table1和100000行创建了sqlite db.我进行下一次测试

long timeLimitOffset = 0;
long timeLimitComma = 0;
for (int i = 0; i < 100000; i++)
{
   //first version
   timeLimitOffset += SqlDuraction("Select * from table1  order by col1 LIMIT " + (i + 1) + " OFFSET " + (1001 - i) + "");
   // second version
   timeLimitComma += SqlDuraction("Select * from table1 order by col1 LIMIT " + (1001 - i) + " , " + (i + 1) + "");
}

时间变化0.001秒

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有