- wachag blogja
- A hozzászóláshoz be kell jelentkezni
- 1155 megtekintés
Hozzászólások
Megmutatod a selectet és a két explain plant? Csak kíváncsi vagyok.
- A hozzászóláshoz be kell jelentkezni
Egyelőre fejlesztés alatt áll:
http://pastebin.com/4hDq3B36
Megjegyzem, semmit sem értek az adatbázisokhoz, csak használom egy saját munka keretében. Explain plan még majd lesz.
Ez elsősorban flamekeltő blogbejegyzés volt :-)
- A hozzászóláshoz be kell jelentkezni
Postgres:
GroupAggregate (cost=8282992475.55..8458955231.90 rows=13689 width=28) (actual time=130310.347..130644.880 rows=912 loops=1)
-> Sort (cost=8282992475.55..8326983130.42 rows=17596261946 width=28) (actual time=130310.324..130627.453 rows=84259 loops=1)
Sort Key: sender.functionname, receiver.functionname
Sort Method: external merge Disk: 3352kB
-> Nested Loop (cost=0.00..1920553680.46 rows=17596261946 width=28) (actual time=21.127..128873.597 rows=84259 loops=1)
Join Filter: ((comm.readcycles >= receiver.startcyclecount) AND (sender.functionname <> receiver.functionname))
-> Nested Loop (cost=0.00..7815395.53 rows=79645342 width=18) (actual time=0.215..521.027 rows=645733 loops=1)
-> Seq Scan on controlflow sender (cost=0.00..36.37 rows=2037 width=22) (actual time=0.055..0.929 rows=2037 loops=1)
-> Index Scan using cwcycles on communication comm (cost=0.00..3250.22 rows=39099 width=8) (actual time=0.006..0.201 rows=317 loops=2037)
Index Cond: ((writecycles >= sender.startcyclecount) AND (writecycles <= sender.endcyclecount))
Filter: ((type = 1) OR ((type = 0) AND (channel = ANY ('{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}'::integer[]))))
-> Index Scan using cfecycles on controlflow receiver (cost=0.00..12.13 rows=679 width=22) (actual time=0.004..0.131 rows=863 loops=645733)
Index Cond: (comm.readcycles <= endcyclecount)
Total runtime: 130645.871 ms
- A hozzászóláshoz be kell jelentkezni
Ez neked ronda? :) Van egy 144 soros MSSQL Querym :)
Nalad is csak a channel IN (...) a sok.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Az a ronda benne :-)
A többi okés.
- A hozzászóláshoz be kell jelentkezni
Van ennél cifrább is, de az hamar lefut :-).
- A hozzászóláshoz be kell jelentkezni
Köszi!
- A hozzászóláshoz be kell jelentkezni
A MySQL egyelőre még fut.
- A hozzászóláshoz be kell jelentkezni
MySQL:
1 PRIMARY ALL [NULL] [NULL] [NULL] [NULL] 662107 Using temporary; Using filesort
1 PRIMARY receiver ALL cfscycles,cfecycles [NULL] [NULL] [NULL] 2057 Range checked for each record (index map: 0x3)
2 DERIVED comm ALL cchannel [NULL] [NULL] [NULL] 614472 Using where
2 DERIVED sender ALL cfscycles,cfecycles [NULL] [NULL] [NULL] 2057
- A hozzászóláshoz be kell jelentkezni
próbáld átírni CTE-re és úgy mindkettő jobban odateszi magát. Ne félj, nem kell hozzá érteni, csak ismerni. :)
http://msdn.microsoft.com/en-us/library/ms175972.aspx
http://www.postgresql.org/docs/9.2/static/queries-with.html
- A hozzászóláshoz be kell jelentkezni
De ettől miért lenne gyorsabb? Ez inkább csak szintaktikailag más.
- A hozzászóláshoz be kell jelentkezni
CTE-t lehet referenciaként használni, olvashatóbb, karban tarthatóbb és rekurzív szelekteknél használható jól. Ennél már csak a temptábla jobb, amire indexet is tehetsz, de az már a "kicsit értek hozzá" mesgye, nagyon veszélyes. :)
Volt nekem 2-300 soros select-szörnyem és CTE-vel valamiért gyorsabb lett, kb 30%-a lett a futásidő az eredetinek..
- A hozzászóláshoz be kell jelentkezni
A rekurziót tényleg nem nagyon lehet máshogy, de amúgy én biztos a temp tábla + triggerek/jobok felé mennék, ha a teljesítmény a fontos. Az olvasható és karbantartható selectjeim általában lassúak lesznek :)
- A hozzászóláshoz be kell jelentkezni
Ó bakker, ha ezt ismertem volna egy fél évvel ezelőtt... :)
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
A MySQL-nel szerintem a nested select a problema, azt nagyon nem szokta szeretni. Ha azt elhagyod, akkor is lassu?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Akkor nincs értelme a lekérdezésemnek :-)
Komolyra fordítva: lehet, volna értelme megnézni, ha nagyon ráérek, kipróbálom.
Egyelőre kiválóan megy Postgres-sel, és feltételezhetően lesz olyan rész, amihez meg ígyis-úgyis az fog kelleni, mert a MySQL nem támogatja az adott funkciót.
- A hozzászóláshoz be kell jelentkezni