phpbar.de logo

Mailinglisten-Archive

ist die Reihenfolge wichtig

ist die Reihenfolge wichtig

Andreas Kretschmer andreas.kretschmer at schollglas.com
Don Jan 19 07:40:15 CET 2006


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