我对Sqlite有一个简单的问题.这有什么区别:
Select * from Animals LIMIT 100 OFFSET 50
Run Code Online (Sandbox Code Playgroud)
和
Select * from Animals LIMIT 100,50
Run Code Online (Sandbox Code Playgroud) 这是我在下面给出的查询.
select * from data where value = "yes";
Run Code Online (Sandbox Code Playgroud)
我的id是自动增量,下面是给定查询的结果.
id || value
1 || yes
3 || yes
4 || yes
6 || yes
9 || yes
Run Code Online (Sandbox Code Playgroud)
如何在sqlite中使用ROW_NUMBER?这样我就可以得到下面给出的结果.
NoId || value
1 || yes
2 || yes
3 || yes
4 || yes
5 || yes
Run Code Online (Sandbox Code Playgroud)
ROW_NUMBER作为NoId.
以下是我用于从具有数百万条记录的数据库中获取固定数量记录的查询: -
select * from myTable LIMIT 100 OFFSET 0
Run Code Online (Sandbox Code Playgroud)
我观察到的是,如果偏移量非常高,比如说90000,那么查询执行需要更多时间.以下是具有不同偏移量的2个查询之间的时差:
select * from myTable LIMIT 100 OFFSET 0 //Execution Time is less than 1sec
select * from myTable LIMIT 100 OFFSET 95000 //Execution Time is almost 15secs
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我如何优化此查询?我的意思是,对于我希望从任何OFFSET检索的任何数量的记录,查询执行时间应该相同且快速.
新增: - 实际情况是我的数据库有超过100万条记录.但由于它是一个嵌入式设备,我不能做"select*from myTable",然后从查询中获取所有记录.我的设备崩溃了.相反,我所做的是按照上面提到的查询逐批获取记录(批量大小= 100或1000条记录).但正如我所提到的,随着偏移的增加,它变得缓慢.所以,我的最终目标是我想从数据库中读取所有记录.但由于我无法在一次执行中获取所有记录,我需要一些其他有效的方法来实现这一点.