@akretschmer Lese ich gerade falsch... Oder hast du wirklich nen Bitmap Index für nen PK angelegt?
@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 )
---------------------------------------------------------------------------------------------------------------------------------------------------------- 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: