Not saying this will be faster for sure, but it's worth a try. Try a
composite index on (dept, salary). The goal is to rank distinct salaries
within department, and have those salary rankings be used as the inner
loop when the EEs table is joined to the ranking on the salary column.
The assumption is that there are far fewer distinct salaries than
distinct employees.
Tim Romano
CREATE TABLE "EES" ("id" int PRIMARY KEY NOT NULL , "dept" int NOT NULL
, "salary" int NOT NULL , "empname" text NOT NULL )
select EES.dept, EES.empname, S3.rank from EES
JOIN
(
select s1.dept, s1.salary,
(select count(*) + 1 from
(select distinct dept, salary from EES) as S2 where S1.dept=s2.dept and
s1.salary < s2.salary) as rank
from
(select distinct dept, salary from EES) as S1
) as S3
ON S3.dept = EES.dept and S3.salary = EES.salary
order by EES.dept, rank
Explain Query Plan:
Order, from, detail
0,0, TABLE EES WITH INDEX EES_IX ORDER BY
0,1, TABLE AS S1
1,0, TABLE EES WITH INDEX EES_IX
0,0, TABLE EES WITH INDEX EES_IX ORDER BY
0,0,TABLE AS S2
0,0, TABLE EES WITH INDEX EES_IX ORDER BY
0,0, TABLE AS S2
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users