Mailinglisten-Archive |
am 18.01.2006, um 22:48:07 +0100 mailte Norbert Pfeiffer folgendes: > Hi, > > > > in der WHERE-Klausel stehen mehrere Bedingungen, die mit AND > > > verknuepft sind: "WHERE FG = 'Y' AND SH = 'Y' AND cID = 17" > > > Nun weiss ich, dass es z.B. bei PostgreSQL einen Unterschied > > > macht, in welcher Reihenfolge die Bedingungen stehen. > > Kannst Du das belegen? > na-ja, > habe meinen Telefonjoker missbraucht: > http://www.dpunkt.de/buch/3-89864-175-9.html Da sehe ich nur Werbung für ein Buch. Aber machen wir mal einen Test: ,----[ Tabelle mit ca. 1200000 Datensätzen ] | scholl=# explain analyse select count(*) from bde_meldungen where maschine=7100 and uf='B55030-03' and datum = '2005/11/29'; | QUERY PLAN | ---------------------------------------------------------------------------------------------------------------------------------- | Aggregate (cost=10.80..10.81 rows=1 width=0) (actual time=0.236..0.238 rows=1 loops=1) | -> Bitmap Heap Scan on bde_meldungen (cost=6.77..10.79 rows=1 width=0) (actual time=0.217..0.221 rows=2 loops=1) | Recheck Cond: ((uf = 'B55030-03'::bpchar) AND (maschine = 7100) AND (datum = '2005-11-29'::date)) | -> BitmapAnd (cost=6.77..6.77 rows=1 width=0) (actual time=0.206..0.206 rows=0 loops=1) | -> Bitmap Index Scan on bde_uf (cost=0.00..2.33 rows=94 width=0) (actual time=0.080..0.080 rows=9 loops=1) | Index Cond: (uf = 'B55030-03'::bpchar) | -> Bitmap Index Scan on idx_combi (cost=0.00..4.19 rows=199 width=0) (actual time=0.114..0.114 rows=318 loops=1) | Index Cond: ((maschine = 7100) AND (datum = '2005-11-29'::date)) | Total runtime: 0.363 ms | (9 rows) | | scholl=# explain analyse select count(*) from bde_meldungen where uf='B55030-03' and datum = '2005/11/29' and maschine=7100; | QUERY PLAN | ---------------------------------------------------------------------------------------------------------------------------------- | Aggregate (cost=10.80..10.81 rows=1 width=0) (actual time=0.252..0.254 rows=1 loops=1) | -> Bitmap Heap Scan on bde_meldungen (cost=6.77..10.79 rows=1 width=0) (actual time=0.231..0.235 rows=2 loops=1) | Recheck Cond: ((uf = 'B55030-03'::bpchar) AND (maschine = 7100) AND (datum = '2005-11-29'::date)) | -> BitmapAnd (cost=6.77..6.77 rows=1 width=0) (actual time=0.220..0.220 rows=0 loops=1) | -> Bitmap Index Scan on bde_uf (cost=0.00..2.33 rows=94 width=0) (actual time=0.081..0.081 rows=9 loops=1) | Index Cond: (uf = 'B55030-03'::bpchar) | -> Bitmap Index Scan on idx_combi (cost=0.00..4.19 rows=199 width=0) (actual time=0.128..0.128 rows=318 loops=1) | Index Cond: ((maschine = 7100) AND (datum = '2005-11-29'::date)) | Total runtime: 0.363 ms | (9 rows) | | scholl=# explain analyse select count(*) from bde_meldungen where datum = '2005/11/29' and maschine=7100 and uf='B55030-03'; | QUERY PLAN | ---------------------------------------------------------------------------------------------------------------------------------- | Aggregate (cost=10.80..10.81 rows=1 width=0) (actual time=0.237..0.239 rows=1 loops=1) | -> Bitmap Heap Scan on bde_meldungen (cost=6.77..10.79 rows=1 width=0) (actual time=0.217..0.221 rows=2 loops=1) | Recheck Cond: ((uf = 'B55030-03'::bpchar) AND (maschine = 7100) AND (datum = '2005-11-29'::date)) | -> BitmapAnd (cost=6.77..6.77 rows=1 width=0) (actual time=0.207..0.207 rows=0 loops=1) | -> Bitmap Index Scan on bde_uf (cost=0.00..2.33 rows=94 width=0) (actual time=0.081..0.081 rows=9 loops=1) | Index Cond: (uf = 'B55030-03'::bpchar) | -> Bitmap Index Scan on idx_combi (cost=0.00..4.19 rows=199 width=0) (actual time=0.114..0.114 rows=318 loops=1) | Index Cond: ((maschine = 7100) AND (datum = '2005-11-29'::date)) | Total runtime: 0.346 ms | (9 rows) `---- Für mich sehen die Ausführungspläne gleich aus, wie zu erwarten war. Das die Zeiten *etwas* unterschiedlich sind, mag auf Cacheeinträge und andere aktuelle Tasks rückführbar sein, sind ja auch nur marginal. Version ist 8.1, alle Spalten, auf denen ich Bedingungen habe, haben Indexe. > Dafuer gibt es auch einen Fachausdruck, aber den habe ich nicht > korrekt verstanden, sie war gerade beim Essen ... ;-) > > Aber das war jetzt nicht die Frage, gell ... Nein, aber man könnte nun fragen, ob MySQL nicht mal ein EXPLAIN kennt... Andreas -- Andreas Kretschmer (Kontakt: siehe Header) Heynitz: 035242/47212, D1: 0160/7141639 GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net === Schollglas Unternehmensgruppe === -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive