
Hi, I just did that - no improvement, still grouping by first on fields with little distinct values seems to be the way to go, see attached. Thanks. Dariusz. Stefan Manegold wrote:
On Wed, Jan 28, 2009 at 02:21:37PM -0500, Chris Curvey wrote:
On Wed, Jan 28, 2009 at 11:47 AM, dariuszs <dariuszs@svnp.com> wrote:
Hi, If I rewrite this query like this
select * from (select gender,count(*) from table1 group by gender) as t1 where t1.gender in ('F','M');
It takes about 2 seconds which is wonderful however how do I apply this to very complicated queries? Thanks. Dariusz.
I might suggest that it will be cleaner to do it this way.
select gender, count(*) from table1 group by gender having gender in ('F','M');
(In the past, I've found that the construct "select ... from (select ....)" ends up creating SQL that's really hard to debug. YMMV.)
indeed a good idea --- [cs]hould have been mine ... ;-)
dariuszs, feel free to test/trace this one on your data, too.
Stefan
------------------------------------------------------------------------------ This SF.net email is sponsored by: SourcForge Community SourceForge wants to tell your story. http://p.sf.net/sfu/sf-spreadtheword _______________________________________________ MonetDB-users mailing list MonetDB-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/monetdb-users
:250000[0]:W Strace select f25,count(*) from trw100 group by f25 having f25 in ('F','M'); :261735[0]:R [ 0 usec mdb.setTimer(true); ] [ 16000 usec _3 := sql.bind("sys","trw100","f1",0); ] [ 16000 usec _8 := sql.bind("sys","trw100","f1",1); ] [ 15000 usec _10 := algebra.kunion(<tmp_11270>:bat[:oid,:str][96240405],<tmp_17032>:bat[:oid,:str][0]); ] [ 16000 usec _3 := nil; ] [ 16000 usec _8 := nil; ] [ 15000 usec _11 := sql.bind("sys","trw100","f1",2); ] [ 16000 usec _13 := algebra.kdifference(<tmp_20163>[96240405],<tmp_61>:bat[:oid,:str][0]); ] [ 15000 usec _10 := nil; ] [ 16000 usec _14 := algebra.kunion(<tmp_20173>[96240405],<tmp_61>:bat[:oid,:str][0]); ] [ 16000 usec _13 := nil; ] [ 15000 usec _11 := nil; ] [ 16000 usec _15 := sql.bind_dbat("sys","trw100",1); ] [ 16000 usec _16 := bat.reverse(<tmp_17017>:bat[:oid,:oid][0]); ] [ 15000 usec _15 := nil; ] [ 16000 usec _17 := algebra.kdifference(<tmp_20163>[96240405],<~tmp_17017>[0]); ] [ 15000 usec _14 := nil; ] [ 16000 usec _16 := nil; ] [ 16000 usec _19 := algebra.markT(<tmp_20173>[96240405],0@0); ] [ 15000 usec _17 := nil; ] [ 16000 usec _20 := bat.reverse(<tmp_20163>[96240405]); ] [ 16000 usec _19 := nil; ] [ 15000 usec _21 := sql.bind("sys","trw100","f25",0); ] [ 16000 usec _23 := sql.bind("sys","trw100","f25",1); ] [ 15000 usec _24 := algebra.kunion(<tmp_5213>:bat[:oid,:str][96240405],<tmp_17032>:bat[:oid,:str][0]); ] [ 16000 usec _21 := nil; ] [ 16000 usec _23 := nil; ] [ 15000 usec _25 := sql.bind("sys","trw100","f25",2); ] [ 16000 usec _26 := algebra.kdifference(<tmp_20173>[96240405],<tmp_61>:bat[:oid,:str][0]); ] [ 31000 usec _24 := nil; ] [ 16000 usec _27 := algebra.kunion(<tmp_20160>[96240405],<tmp_61>:bat[:oid,:str][0]); ] [ 15000 usec _26 := nil; ] [ 16000 usec _25 := nil; ] [ 16000 usec _28 := algebra.join(<~tmp_20163>[96240405],<tmp_20173>[96240405]); ] [ 15000 usec _20 := nil; ] [ 16000 usec _27 := nil; ] [ 937000 usec (ext32,grp30) := group.new(<tmp_20200>[96240405]); ] [ 16000 usec _31 := bat.mirror(<tmp_20020>[4]); ] [ 16000 usec ext32 := nil; ] [ 15000 usec _32 := algebra.join(<tmp_20163>[4],<tmp_20200>[96240405]); ] [ 16000 usec _33 := bat.reverse(<tmp_17330>[4]); ] [ 16000 usec _32 := nil; ] [ 15000 usec _34 := bat.new(nil,nil); ] [ 16000 usec bat.append(<tmp_20176>:bat[:oid,:str][1],"F",true); ] [ 15000 usec bat.append(<tmp_20176>:bat[:oid,:str][2],"M",true); ] [ 16000 usec _40 := bat.reverse(<tmp_20176>:bat[:oid,:str][2]); ] [ 16000 usec _34 := nil; ] [ 15000 usec _41 := algebra.semijoin(<~tmp_17330>[4],<~tmp_20176>[2]); ] [ 16000 usec _33 := nil; ] [ 16000 usec _40 := nil; ] [ 15000 usec _42 := bat.reverse(<tmp_20104>[2]); ] [ 16000 usec _41 := nil; ] [ 15000 usec _43 := algebra.semijoin(<tmp_20163>[4],<~tmp_20104>[2]); ] [ 16000 usec _31 := nil; ] [ 16000 usec _44 := algebra.join(<~tmp_20160>[2],<tmp_20200>[96240405]); ] [ 15000 usec _28 := nil; ] [ 16000 usec _45 := bat.reverse(<tmp_20173>[96240405]); ] [ 16000 usec grp30 := nil; ] [ 6531000 usec _46 := algebra.semijoin(<~tmp_20173>[96240405],<~tmp_20104>[2]); ] [ 31000 usec _45 := nil; ] [ 16000 usec _42 := nil; ] [ 31000 usec _47 := bat.reverse(<tmp_20200>[93838869]); ] [ 16000 usec _46 := nil; ] [ 3062000 usec _48 := aggr.count(<~tmp_20200>[93838869],<~tmp_20200>[93838869],<~tmp_20160>[2]); ] [ 63000 usec _47 := nil; ] [ 15000 usec _43 := nil; ] [ 16000 usec _49 := sql.resultSet(2,1,<tmp_20174>[2]); ] [ 31000 usec sql.rsColumn(4,"sys.trw100","f25","varchar",1,0,<tmp_20174>[2]); ] [ 16000 usec _44 := nil; ] [ 15000 usec sql.rsColumn(4,"sys.trw100","count_f25","wrd",64,0,<tmp_17275>:bat[:oid,:wrd][2]); ] [ 16000 usec _48 := nil; ] [ 16000 usec _57 := io.stdout(); ] &1 4 2 2 2 % sys.trw100, sys.trw100 # table_name % f25, count_f25 # name % varchar, wrd # type % 1, 8 # length [ "F", 29577383 ] [ "M", 64261486 ] [ 15000 usec sql.exportResult(1781102128,4,""); ] [ 11735000 usec user.s27_1("F","M"); ] :261782[0]:R :274375[0]:W Strace select * from (select f25,count(*) from trw100 group by f25) as t1 where t1.f25 in ('F','M'); :277563[0]:R [ 0 usec mdb.setTimer(true); ] [ 16000 usec _3 := sql.bind("sys","trw100","f1",0); ] [ 16000 usec _8 := sql.bind("sys","trw100","f1",1); ] [ 15000 usec _10 := algebra.kunion(<tmp_11270>:bat[:oid,:str][96240405],<tmp_17032>:bat[:oid,:str][0]); ] [ 16000 usec _3 := nil; ] [ 16000 usec _8 := nil; ] [ 15000 usec _11 := sql.bind("sys","trw100","f1",2); ] [ 16000 usec _13 := algebra.kdifference(<tmp_20174>[96240405],<tmp_61>:bat[:oid,:str][0]); ] [ 31000 usec _10 := nil; ] [ 16000 usec _14 := algebra.kunion(<tmp_20160>[96240405],<tmp_61>:bat[:oid,:str][0]); ] [ 15000 usec _13 := nil; ] [ 16000 usec _11 := nil; ] [ 16000 usec _15 := sql.bind_dbat("sys","trw100",1); ] [ 15000 usec _16 := bat.reverse(<tmp_17017>:bat[:oid,:oid][0]); ] [ 16000 usec _15 := nil; ] [ 15000 usec _17 := algebra.kdifference(<tmp_20174>[96240405],<~tmp_17017>[0]); ] [ 16000 usec _14 := nil; ] [ 16000 usec _16 := nil; ] [ 15000 usec _19 := algebra.markT(<tmp_20160>[96240405],0@0); ] [ 16000 usec _17 := nil; ] [ 16000 usec _20 := bat.reverse(<tmp_20174>[96240405]); ] [ 15000 usec _19 := nil; ] [ 16000 usec _21 := sql.bind("sys","trw100","f25",0); ] [ 15000 usec _23 := sql.bind("sys","trw100","f25",1); ] [ 16000 usec _24 := algebra.kunion(<tmp_5213>:bat[:oid,:str][96240405],<tmp_17032>:bat[:oid,:str][0]); ] [ 16000 usec _21 := nil; ] [ 15000 usec _23 := nil; ] [ 16000 usec _25 := sql.bind("sys","trw100","f25",2); ] [ 16000 usec _26 := algebra.kdifference(<tmp_20160>[96240405],<tmp_61>:bat[:oid,:str][0]); ] [ 15000 usec _24 := nil; ] [ 16000 usec _27 := algebra.kunion(<tmp_20200>[96240405],<tmp_61>:bat[:oid,:str][0]); ] [ 15000 usec _26 := nil; ] [ 16000 usec _25 := nil; ] [ 16000 usec _28 := algebra.join(<~tmp_20174>[96240405],<tmp_20160>[96240405]); ] [ 15000 usec _20 := nil; ] [ 16000 usec _27 := nil; ] [ 937000 usec (ext32,grp30) := group.new(<tmp_20163>[96240405]); ] [ 16000 usec _31 := bat.mirror(<tmp_20020>[4]); ] [ 16000 usec ext32 := nil; ] [ 15000 usec _32 := algebra.join(<tmp_20174>[4],<tmp_20163>[96240405]); ] [ 16000 usec _28 := nil; ] [ 16000 usec _33 := bat.reverse(<tmp_17330>[4]); ] [ 15000 usec _34 := bat.new(nil,nil); ] [ 16000 usec bat.append(<tmp_20176>:bat[:oid,:str][1],"F",true); ] [ 31000 usec bat.append(<tmp_20176>:bat[:oid,:str][2],"M",true); ] [ 16000 usec _40 := bat.reverse(<tmp_20176>:bat[:oid,:str][2]); ] [ 15000 usec _34 := nil; ] [ 16000 usec _41 := algebra.semijoin(<~tmp_17330>[4],<~tmp_20176>[2]); ] [ 16000 usec _33 := nil; ] [ 15000 usec _40 := nil; ] [ 16000 usec _42 := bat.reverse(<tmp_20104>[2]); ] [ 15000 usec _41 := nil; ] [ 16000 usec _43 := algebra.markT(<~tmp_20104>[2],0@0); ] [ 16000 usec _42 := nil; ] [ 15000 usec _44 := bat.reverse(<tmp_20163>[2]); ] [ 16000 usec _43 := nil; ] [ 16000 usec _45 := algebra.join(<~tmp_20163>[2],<tmp_17330>[4]); ] [ 15000 usec _32 := nil; ] [ 1110000 usec _46 := aggr.count(<tmp_20160>[96240405],<tmp_20160>[96240405],<tmp_20174>[4]); ] [ 31000 usec grp30 := nil; ] [ 15000 usec _31 := nil; ] [ 16000 usec _47 := algebra.join(<~tmp_20163>[2],<tmp_17275>:bat[:oid,:wrd][4]); ] [ 16000 usec _44 := nil; ] [ 15000 usec _46 := nil; ] [ 32000 usec _48 := sql.resultSet(2,1,<~tmp_20177>[2]); ] [ 15000 usec sql.rsColumn(5,"sys.t1","f25","varchar",1,0,<~tmp_20177>[2]); ] [ 16000 usec _45 := nil; ] [ 15000 usec sql.rsColumn(5,"sys.t1","count_f25","wrd",64,0,<~tmp_17254>[2]); ] [ 16000 usec _47 := nil; ] [ 16000 usec _56 := io.stdout(); ] &1 5 2 2 2 % sys.t1, sys.t1 # table_name % f25, count_f25 # name % varchar, wrd # type % 1, 8 # length [ "F", 29577383 ] [ "M", 64261486 ] [ 15000 usec sql.exportResult(1781102128,5,""); ] [ 3188000 usec user.s4_1("F","M"); ] :277594[0]:R :280172[0]:W Connection closed