Mailinglisten-Archive |
--On Montag, 23. Mai 2005 16:27 Uhr +0200 Sebastian Mendel <lists at sebastianmendel.de> wrote: >> select count(distinct trefnum) from transactions >> schmiert der PC ab. >> D.h. es ist kaum noch ein Fenster zu wechseln. > > fürs Protokoll: ein Index auf `trefnum` existiert? > > DISTINCT-Selects (und COUNTs) sind meist sehr Resourcenfressend eben. Es wird in jedem Fall ein "full index scan" oder ein "full table scan" notwendig. > eventuell ist ja ein "SELECT `tarif` GROUP BY `tarif`" > und ein ein mysql_num_rows() schneller. Fuer die notwendige Aggregation muss aber ebenfalls der komplette Index / die komplette Tabelle durchlaufen werden. Was den I/O-Bedarf angeht, duerften sich die beiden Varianten nicht all zu sehr unterscheiden. Wenn die Verwendung des Index nichts (bzw. nicht genug) bringt und diese Information sehr haeufig benoetigt wird, wuerde ich die "Zaehler" explizit in der Datenbank mit- fuehren. (Das geht natuerlich auch nur, wenn die Insert- Operationen dann "schnell genug" bleiben.) -Andreas
php::bar PHP Wiki - Listenarchive