Schema mit Vererbung von Assoziationen

@akretschmer Lese ich gerade falsch... Oder hast du wirklich nen Bitmap Index für nen PK angelegt?
---------------------------------------------------------------------------------------------------------------------------------------------------------- GroupAggregate (cost=574.42..576.40 rows=99 width=24) (actual time=13.646..13.646 rows=0 loops=1) Group Key: episodes.id Filter: (count(DISTINCT tag_junctions.tag_id) = 2) Rows Removed by Filter: 143 -> Sort (cost=574.42..574.67 rows=99 width=24) (actual time=13.269..13.313 rows=143 loops=1) Sort Key: episodes.id Sort Method: quicksort Memory: 27kB -> Hash Join (cost=123.14..571.14 rows=99 width=24) (actual time=2.030..13.205 rows=143 loops=1) Hash Cond: (seasons.tv_show_id = tv_shows.id) Join Filter: ((tag_junctions.association_id = episodes.association_id) OR (tag_junctions.association_id = seasons.association_id) OR (tag_j Rows Removed by Join Filter: 19857 -> Hash Join (cost=56.00..124.00 rows=2000 width=32) (actual time=0.424..2.963 rows=2000 loops=1) Hash Cond: (episodes.season_id = seasons.id) -> Seq Scan on episodes (cost=0.00..38.00 rows=2000 width=28) (actual time=0.005..0.680 rows=2000 loops=1) -> Hash (cost=36.00..36.00 rows=1600 width=12) (actual time=0.411..0.411 rows=400 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 13kB -> Seq Scan on seasons (cost=0.00..36.00 rows=1600 width=12) (actual time=0.008..0.236 rows=400 loops=1) -> Hash (cost=54.64..54.64 rows=1000 width=16) (actual time=1.492..1.492 rows=1000 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 36kB -> Nested Loop (cost=8.65..54.64 rows=1000 width=16) (actual time=0.058..1.035 rows=1000 loops=1) -> Seq Scan on tv_shows (cost=0.00..2.00 rows=100 width=8) (actual time=0.005..0.032 rows=100 loops=1) -> Materialize (cost=8.65..40.16 rows=10 width=8) (actual time=0.001..0.004 rows=10 loops=100) -> Bitmap Heap Scan on tag_junctions (cost=8.65..40.11 rows=10 width=8) (actual time=0.047..0.060 rows=10 loops=1) Recheck Cond: (tag_id = ANY ('{1,2}'::integer[])) Heap Blocks: exact=7 -> Bitmap Index Scan on idx_tag_id (cost=0.00..8.64 rows=10 width=0) (actual time=0.042..0.042 rows=10 loops=1) Index Cond: (tag_id = ANY ('{1,2}'::integer[])) Planning time: 0.863 ms Execution time: 13.734 ms (29 rows)

@timofs Es gibt zwei Gründe warum es langsamer wird...
1. Die Datenbank muss mehr Daten von der Platte lesen
2. Die Datenbank muss mehr Daten an den Client senden

Das ist leider etwas, dass keine Datenbank der Welt ignorieren kann :)
Du musst auf die Ausführungszeit des eigentlichen Selects achten... Nicht auf die Dauer der Datenübertragung... Die ist nämlich zu 100% von deiner Infrastruktur abhängig und nicht von der DB

Edit: Der Grund warum SQLite gegenüber MySQL schneller ist, ist einfach der Grund dass die Datenübertragung über das Netzwerk wegfällt... (SQLite ist halte ne LOKALE Datenbank :) )
 
Zuletzt bearbeitet:
Werbung:
[...] Du musst auf die Ausführungszeit des eigentlichen Selects achten... Nicht auf die Dauer der Datenübertragung... Die ist nämlich zu 100% von deiner Infrastruktur abhängig und nicht von der DB [...]

Meinst du mit "Datenübertragung" z.B. bei MySQL den "Sending Data" Status? Der benötigt mit 99,98% tatsächlich die meiste Zeit.
 
Ja... Denn die Datenbank liefert (via LAN) die Daten an deine Applikation. Zumindest solange es sich um ein DBMS handelt. Bei einer lokalen Datenbank (wie eben SQLite) entfällt eben diese Übertragung weil der Client (deine Applikation, dein Front-End) direkt auf die Datenbank zugreift.
 
Werbung:
Verstehe... Ich schätze ich werde dann lieber auf das Vererben der Tags verzichten, und dafür mit doppelt und dreifachem Tagging leben, ist nicht schön, aber auf Anwenungsebene einfach zu handhaben, und letztendlich Performance technisch scheinbar unschlagbar, selbst mit 100,000 Videos und 2,000,000 Verknüpfungen bewege ich mich dann im Millisekunden bis 1-2 Hundertstelsekunden Bereich.

Danke soweit :)

Gruß, Tim
 
Zurück
Oben