Mailinglisten-Archive |
Aloha, > Von: alexander.merz_(at)_t-online.de[SMTP:alexander.merz_(at)_t-online.de] > > Beck, Mike wrote: > > > ich bilde mir auch ein mich zu erinnern das kaj arnö das auf seinem > workshop > > zur optimierung von mysql auf der php-konf letztes jahr erwähnte, aber > da > > Bei SELECT * werden keinerlei Indices genutzt, wenn meine Mitschrift von > der Conf stimmt. > das wäre mir neu. Ob Indexe benutzt werden, hängt davon ab ob welche vorhanden sind, ob diese Benutzt werden können, ob es Sinn macht sie zu benutzen und ob sie benötigt werden (where-Bedingung oder order by ...) Fakt ist, daß bei select * alle Spalten zum Client transportiert werden müssen, was ziemlicher Unfug ist, wenn man nur 1 oder 2 Spalten braucht. select * from d_teilnehmer: 1496 rows in set (0.14 sec) select vorname, nachname from d_teilnehmer; 1496 rows in set (0.03 sec) select * from d_teilnehmer: 1496 rows in set (0.12 sec) select vorname, nachname from d_teilnehmer; 1496 rows in set (0.03 sec) ich habe beide querys 2 x ausgeführt, um Einflüsse durch das Caching zu vermeiden. mysql> desc d_teilnehmer; +------------------+------------------+------+-----+ | Field | Type | Null | Key | +------------------+------------------+------+-----+ | id | int(10) unsigned | | PRI | | nachname | varchar(254) | | | | vorname | varchar(254) | | | | oe | varchar(254) | | | | email | varchar(254) | | | | termin_id | int(10) unsigned | | | | TIMESTAMP | timestamp(14) | YES | | | LAST_CHANGE_USER | varchar(254) | YES | | +------------------+------------------+------+-----+ 8 rows in set (0.00 sec) create table test select * from d_teilnehmer; Query OK, 1496 rows affected (0.06 sec) (oh, das Anlegen der Tabelle ist 0.08s schneller als das select!) mysql> insert into test select (id+1496), nachname, vorname, oe, email, termin_i d, NULL, LAST_CHANGE_USER from d_teilnehmer; (.... ein paar mal wiederholt) mysql> select count(*) from test; +----------+ | count(*) | +----------+ | 37400 | So jetzt nochmal der Vergleich: select * from test; 37400 rows in set (2.93 sec) 37400 rows in set (2.93 sec) select vorname, nachname from test; 37400 rows in set (0.69 sec) 37400 rows in set (0.69 sec) (Abwechselnd ausgeführt, 2 x identische Zeiten) Hoffe, daß das die Diskussion beendet ;-) Viele Grüße, Mathias
php::bar PHP Wiki - Listenarchive