What is the purpose of the ORDER BY?  

The value of a used for the order by is from some random row in the grouping of 
c.  Are there relationships between a, b, c, d that you have not documented nor 
told us about?

In any case, your most efficient index is on (b, c).  

The order by is useless.

> -----Original Message-----
> From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org]
> On Behalf Of Hamish Allan
> Sent: Sunday, 2 April, 2017 17:28
> To: sqlite-users@mailinglists.sqlite.org
> Subject: [sqlite] Indexing WHERE with GROUP BY and ORDER BY
> 
> Given a table:
> 
> CREATE TABLE x (a INT, b INT, c TEXT, d TEXT);
> 
> the query:
> 
> SELECT d FROM x WHERE b = 1 GROUP BY c ORDER BY a;
> 
> shows the following plan, without indexes:
> 
> 0|0|0|SCAN TABLE x
> 0|0|0|USE TEMP B-TREE FOR GROUP BY
> 0|0|0|USE TEMP B-TREE FOR ORDER BY
> 
> I can create an index to cover the WHERE clause:
> 
> CREATE INDEX b_index ON x (b);
> 
> which gives the plan:
> 
> 0|0|0|SEARCH TABLE x USING INDEX b_index (b=?)
> 0|0|0|USE TEMP B-TREE FOR GROUP BY
> 0|0|0|USE TEMP B-TREE FOR ORDER BY
> 
> or I can create an index to cover the GROUP BY clause:
> 
> DROP INDEX b_index;
> CREATE INDEX c_index ON x (c);
> 
> which gives the plan:
> 
> 0|0|0|SCAN TABLE x USING INDEX c_index
> 0|0|0|USE TEMP B-TREE FOR ORDER BY
> 
> but I don't seem to be able to create a combined index to cover both
> the WHERE and GROUP BY clauses (let alone the ORDER BY clause).
> 
> Am I missing something, or is this just not possible?
> 
> If it's not possible, which is the more efficient of those indexes  --
> or is there a third way, using an index for the ORDER BY, which would
> be more efficient still?
> 
> Thanks,
> Hamish
> _______________________________________________
> 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