我有一个简单的问题关于SQLite。以下两者有何不同:
Select * from Animals LIMIT 100 OFFSET 50
和
Select * from Animals LIMIT 100,50
LIMIT <skip>, <count>
等价于:
LIMIT <count> OFFSET <skip>
它与MySQL和PostgreSQL的语法兼容。MySQL支持这两种语法形式,其文档声称第二种带OFFSET的语法是为了与PostgreSQL兼容。PostgreSQL 文档只支持第二种语法,而SQLite的文档则显示它支持两种语法,并建议使用第二种语法以避免混淆。
顺便说一句,在没有使用ORDER BY的情况下使用LIMIT可能不会始终给您想要的结果。实际上,SQLite会按某种顺序返回行,可能由它们在文件中的物理存储方式决定。但这并不一定意味着它是您想要的顺序。获取可预测的顺序的唯一方法是明确使用ORDER BY。
后者是一种替代语法,但有一个注意点:
如果使用逗号代替OFFSET关键字,则第一个数字是偏移量,第二个数字是限制数量。这看似矛盾是有意为之的-它最大化了与传统SQL数据库系统的兼容性。
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秒