PHP: SELECT ... LIMIT 0,10 saulangsam

Bash, Shell, PHP, Python, Perl, CGI
energy2
Posts: 16
Joined: 2003-04-07 19:16

PHP: SELECT ... LIMIT 0,10 saulangsam

Post by energy2 »

Hallo,

ich hab eine seite die sehr oft aufgerufen wir, in der stunde sicher 1000 Mal, auf dieser seite hab ich einen SELECT (mysql) befehl der aus einer Tabelle mit 100.000 zeilen ein paar felder holt (3 int, 1 char(30)), das ganze in PHP.

Das Problem ist die Ausführzeit für den Query die alleine gut 0,3 Sekunden beträgt.

Code: Select all

SELECT foto_id, f_folder, f_comments, f_views FROM tbl_fotos WHERE f_event_id=502 LIMIT 0,1
Wenn ich das nun 1000 Datensätze abfrage

Code: Select all

SELECT foto_id, f_folder, f_comments, f_views FROM tbl_fotos WHERE f_event_id=502
(also ohne LIMIT 0,1) benötigt er die selbe zeit.


Gibt es hier eine möglichkeit eine zeitverbesserung zu erzielen die dann wiederum auch den server entlastet?

DANKE
energy
jtb
Posts: 599
Joined: 2002-08-18 16:41
Location: Darmstadt

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by jtb »

wie sieht die Tabellenstruktur genau aus?
Warum verwendest du Char? Ist das Feld wirklich immer voll ausgefüllt?
gamecrash
Posts: 339
Joined: 2002-05-27 10:52

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by gamecrash »

Hm, also wenn die Tabelle sehr viele Datensätze enthält (und so hört sich das mal an), probier mal einen Index auf f_event_id zu setzen...
energy2
Posts: 16
Joined: 2003-04-07 19:16

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by energy2 »

1. die varchar(30) felder sind (fast) immer voll,
momentan sind 91.000 datensätze in der Tabelle,

Strukture wie folgt:

10 x int(5)
5 x int(3)
1 x tinyint(1)
3 x varchar(30)
1 x varchar(255)

Bei meiner abfrage hab ich ja nur ein paar felder, sollte schneller gehen.

Code: Select all

SELECT foto_id, f_folder, f_comments, f_views FROM tbl_fotos WHERE f_event_id=502 LIMIT 0,10;
Ich versteh nur nicht warum es gleich lange dauert wenn mir der mysql server alle liefert oder wenn mir der mysql server nur 10 bestimmte liefern soll.

Ich hab den index mal auf f_event_id (und foto_id) gestellt, hat keine zeit gebracht. (hatte nun 2 indizes..) hab dann nur den index auf f_event_id gestellt, auch keine zeitverbesserung.
outofbound
Posts: 470
Joined: 2002-05-14 13:02
Location: Karlsruhe City

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by outofbound »

Das ist ganz einfach:

Der Querry ist der gleiche, nur werden halt nachher weniger übertragen...

er muss einfach alle abfragen, was er dir dann zurückliefert ist (Nen Teil oder alles) nimmt nur wenig rechenzeit in Anspruch ;)

Gruss,

Out
jtb
Posts: 599
Joined: 2002-08-18 16:41
Location: Darmstadt

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by jtb »

mach mal ein explain für die Query und poste es hier..

bitte achte in Posts immer auf genaue Infos! Char und Varchar sind grundsätzlich verschieden!

btw: Struktur einer Tabelle besser als Create Table - Statement posten..
Deine Struktur reicht nicht aus, um manche Fehler auszuschließen!
energy2
Posts: 16
Joined: 2003-04-07 19:16

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by energy2 »

ok,

hier die Struktur:

Code: Select all

CREATE TABLE fotos (
  foto_id int(7) NOT NULL auto_increment,
  f_aktiv tinyint(1) default '0',
  f_date int(12) default NULL,
  f_event_id int(6) default '0',
  f_folder varchar(30) default NULL,
  f_foto_nr int(4) default '0',
  f_prev_foto int(7) default '0',
  f_next_foto int(7) default '0',
  f_fotograf_1 varchar(30) default '0',
  f_fotograf_1_id int(3) default NULL,
  f_fotograf_2 varchar(30) default NULL,
  f_fotograf_2_id int(3) default NULL,
  f_filesize int(6) default '0',
  f_width int(3) default '0',
  f_height int(3) default '0',
  f_mypic varchar(255) default NULL,
  f_vote int(5) default '0',
  f_votes int(5) default '0',
  f_comments int(4) default '0',
  f_views int(6) default '0',
  f_mailed int(5) default '0',
  PRIMARY KEY  (foto_id)
) TYPE=MyISAM;
mach ein explain für die Query und poste es hier ..
Sorry, das ist mir "explain" gemeint, einer erklärung abliefern?

danke!
jtb
Posts: 599
Joined: 2002-08-18 16:41
Location: Darmstadt

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by jtb »

wo bitte sind die Keys?

mach mal ein explain vor deinem Select und poste dann die Ausgabe..
olaf.dietsche
Posts: 401
Joined: 2002-12-19 02:06
Location: Siegburg

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by olaf.dietsche »

energy2 wrote:
mach ein explain für die Query und poste es hier ..
Sorry, das ist mir "explain" gemeint, einer erklärung abliefern?
Explain findest du hier erklärt: http://www.mysql.com/doc/de/EXPLAIN.html
coolsurfer
Posts: 61
Joined: 2002-05-01 18:16

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by coolsurfer »

Hi,

gib mal als SQL-Statement ein:

Code: Select all

"EXPLAIN SELECT foto_id, f_folder, f_comments, f_views FROM tbl_fotos WHERE f_event_id=502 LIMIT 0,10"
und

Code: Select all

"EXPLAIN SELECT foto_id, f_folder, f_comments, f_views FROM tbl_fotos WHERE f_event_id=502"
und poste beide Ausgaben hier NACHDEM du einen zusätzlichen Index auf "f_event_id" gesetzt hast.

coolsurfer


---
PS: [bzgl. der neuen Regeln] Diese Nachricht darf vom Rootforum.de unbeschränkt verwendet werden;
jedoch geht das geistige Eigentum dieser Nachricht nicht in den Besitz des Rootforums über :-)
gamecrash
Posts: 339
Joined: 2002-05-27 10:52

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by gamecrash »

Ich zitier mich ganz einfach mal selber, hast Du wohl überlesen ;)
GameCrash wrote:probier mal einen Index auf f_event_id zu setzen...

Wenn ich's richtig im Kopf hab, wär das diese Syntax:

Code: Select all

ALTER TABLE fotos ADD INDEX (f_event_id);
energy2
Posts: 16
Joined: 2003-04-07 19:16

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by energy2 »

Also das mit den Index auf f_event_id setzen hab ich bereits gemacht, hat aber keinen zeitgewinn mit sich gebracht. Nun, da ich endlich begriffen habe was mit EXPLAIN gemeint ist, hab ich diese 2 queries ausgeführt:

Code: Select all

"EXPLAIN SELECT foto_id, f_folder, f_comments, f_views FROM tbl_fotos WHERE f_event_id=502 LIMIT 0,10"
und

Code: Select all

"EXPLAIN SELECT foto_id, f_folder, f_comments, f_views FROM tbl_fotos WHERE f_event_id=502"

beim 1.:

Code: Select all

table  type  possible_keys  key  key_len  ref  rows  Extra  
fotos ALL NULL NULL NULL NULL 87258 where used 
beim 2. ist genau das selbe.
jtb
Posts: 599
Joined: 2002-08-18 16:41
Location: Darmstadt

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by jtb »

[x] du hast den Index nicht gemacht

poste nochmal das Create Table-Script (aber das aktuelle)..
energy2
Posts: 16
Joined: 2003-04-07 19:16

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by energy2 »

Code: Select all

CREATE TABLE fotos (
  foto_id int(7) NOT NULL auto_increment,
  f_aktiv int(1) default '0',
  f_date int(12) default NULL,
  f_event_id int(6) NOT NULL default '0',
  f_folder varchar(30) default NULL,
  f_foto_nr int(4) default '0',
  f_prev_foto int(7) default '0',
  f_next_foto int(7) default '0',
  f_fotograf_1 varchar(30) default '0',
  f_fotograf_1_id int(3) default NULL,
  f_fotograf_2 varchar(30) default NULL,
  f_fotograf_2_id int(3) default NULL,
  f_filesize int(6) default '0',
  f_width int(3) default '0',
  f_height int(3) default '0',
  f_mypic varchar(255) default NULL,
  f_vote int(5) default '0',
  f_votes int(5) default '0',
  f_comments int(4) default '0',
  f_views int(6) default '0',
  f_mailed int(5) default '0',
  PRIMARY KEY  (foto_id,f_event_id)
) TYPE=MyISAM;
danke für die Hilfe!
jtb
Posts: 599
Joined: 2002-08-18 16:41
Location: Darmstadt

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by jtb »

argh..
du hast den Primary-Key geändert..
setze den bitte wieder zurück!

Und erstelle einen normalen Index auf die Spalte - der Syntax wurde ja schon gepostet..


BITTE schau dir SQL an :cry:
energy2
Posts: 16
Joined: 2003-04-07 19:16

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by energy2 »

jope, so dumm bin ich also, hab den scheiss eben selbst bemerkt und hab beschlossen donnerstags nie wieder zu feiern, und seinen die bedienungen noch so ideal ;-)

hab nun den einen index bei f_event_id hinzugefügt, und das ergebnis wird 10 mal schon zurück geliefert.

Entschuldige bitte meinen Fehler, jetzt hab ich die gewünschte abfragezeit,

ein großes Danke!!!!!
jtb
Posts: 599
Joined: 2002-08-18 16:41
Location: Darmstadt

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by jtb »

kein Problem..

Du hast Glück, es sind dir wohl bei dem Fehler keine Daten kaputt gegangen..

Ein Grund, warum ich nur ausgeschlafen arbeite (oder es zumindest versuche)..
energy2
Posts: 16
Joined: 2003-04-07 19:16

Re: PHP: SELECT ... LIMIT 0,10 saulangsam

Post by energy2 »

also datenverlust hätte es so oder so nicht geben soll da ich bei solchen aktionen, auch wenn ich müde und unkonzentriert bin, vorher ein BackUp mache oder das ganze auf einen unabhängigen (lokalen) server teste.