Argh, I just discovered that gmail was sending all sqlite mails to spam :(
Thank you all for the answers!

Clemens, R Smith: Sorry, I should have given a full production query.
Here's an example:

   SELECT "id" AS _3,"json" AS _5,ifNull(json_extract(json, '$.name'),'')
AS _0 FROM "agents" tbl WHERE(ifNull(json_extract(json, '$.name'),'') LIKE
'%a%') ORDER BY _0,_3 LIMIT 10
   SELECT COUNT(*) as t from "agents" tbl WHERE(ifNull(json_extract(json,
'$.name'),'') LIKE '%a%')

And when I then want to continue from the agent Al with id 123:

   SELECT "id" AS _3,"json" AS _5,ifNull(json_extract(json, '$.name'),'')
AS _0 FROM "agents" tbl WHERE(ifNull(json_extract(json, '$.name'),'') LIKE
'%a%')AND((_0>='Al' AND (_0!='Al' OR _3>123))) ORDER BY _0,_3 LIMIT 10
   SELECT COUNT(*) as t from "agents" tbl WHERE(ifNull(json_extract(json,
'$.name'),'') LIKE '%a%')


heribert: I prefer using queries like these because if you use offset, the
engine needs to skip rows one by one, and if you instead keep the order-by
values the engine can use the index to find the next set of results. For
small databases it doesn't matter of course.


On Mon, Jun 4, 2018 at 6:00 PM heribert <herib...@scharnagl.com> wrote:

> I'm using also paged queries. I'm adding an OFFSET to the select-limit
> query.
> Works for me.
>
> Am 03.06.2018 um 14:16 schrieb R Smith:
> >
> > On 2018/06/03 1:13 PM, Wout Mertens wrote:
> >> Hi all,
> >>
> >> To do paged queries on a query like
> >>
> >>      SELECT colVal FROM t WHERE b=? LIMIT 10
> >>
> >> I keep track of column values and construct a query that will get the
> >> next
> >> item in a query by augmenting the query like
> >>
> >>      SELECT colVal FROM t WHERE b=? AND colVal > ? LIMIT 10
> >>
> >>
> >> To know how many rows there are in the query, I do
> >>
> >>      SELECT COUNT(*) FROM t WHERE b=?
> >>
> >>
> >> Are there any efficiency tricks here? Is it better to run the count
> >> before
> >> the query or vice versa?
> >
> > I assume b is not the Primary Key, (since the use case suggests that
> > it repeats), but hopefully it is at least an Index.
> >
> > - If it is not an Index, the entire system is inefficient.
> >
> > - If it is an Index, then it doesn't matter which comes first[*], the
> > queries are dissimilar enough to not have differing caching advantages
> > based on order of execution, except...
> >
> > - If it is an Index, /and/ the Key repeats magnificently much (Imagine
> > adding an "Age" column to a phone-book and then filtering on Age,
> > there will be thousands of people who are all 34, for instance) then
> > you are better off extracting the set of records to a TEMP table and
> > then paginating through the temp table's complete dataset and COUNT(*)
> > its rows. This will be extremely fast, especially if the DB is
> > otherwise quite hefty, and will allow using the new table's rowids
> > (invisible in the query) as pagination pegs. Be sure to use a
> > memory-oriented journal mode and cache settings for this, or if not
> > possible, perhaps even a second attached in-memory or memory-oriented DB.
> >
> > [*] - The above assumes there are no FTS tables (or other special
> > virtual tables) involved, nor any computed Keys - all of which may
> > need more specific considerations.
> >
> >
> > Cheers,
> > Ryan
> >
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@mailinglists.sqlite.org
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to