phpbar.de logo

Mailinglisten-Archive

AW: AW: [php] Tabellen auslesen aber wie ?

AW: AW: [php] Tabellen auslesen aber wie ?

Gloss Mathias php_(at)_phpcenter.de
Tue, 11 Jun 2002 14:13:56 +0200


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