PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wie aufwendig ist ein Such-Query


Dhruv
2009-08-06, 17:42:05
Hallo all,

schreibe gerade ein Code in PHP, der die folgende XML Datei liest:

[code]
<?xml version="1.0" encoding="ISO-8859-1"?>
<members>
<member>
<aname>Mustermann</aname>
<atype>f</atype>
<aage>5</aage>
<arating>6</arating>
</member>
</members>

Jetzt muss ich ein paar Queries darüber laufen lassen:
Ein Such Query ist z.B: "Select * from list where atype ='f' "
Anderes Beispiel: "Select * from list where aage = '5' and atype ='f' "

Das zweite Query ist bestimmt aufwendiger als das Erste. Wie kann man das in O Kalkul ausdrucken?

Kann man auch irgendwie messen wieviel Zeit die Queries benötigen?

Vielen Dank
Dhruv

Gast
2009-08-06, 17:48:30
man kann die ausführungszeit des php-scripts messen, z.b. mit der microtime funktion.

Senior Sanchez
2009-08-06, 17:51:41
Also wenn wir mal davon ausgehen, dass dahinter ein ordentliches DBMS steht und sofern keine besonderen Indexe (also z.B. einer über age) bestehen, sind die Anfragen gleich schnell.

Im simpelsten Fall schaut sich das DBMS alle Tupel der Relation list an und testet einfach die verlangten Attribute. Ob er da nun eins oder zwei testet macht den Kohl im Endeffekt nicht fett.

Pinoccio
2009-08-06, 17:53:14
Hallo all,

schreibe gerade ein Code in PHP, der die folgende XML Datei liest:

[code]
<?xml version="1.0" encoding="ISO-8859-1"?>
<members>
<member>
<aname>Mustermann</aname>
<atype>f</atype>
<aage>5</aage>
<arating>6</arating>
</member>
</members>

Jetzt muss ich ein paar Queries darüber laufen lassen:
Ein Such Query ist z.B: "Select * from list where atype ='f' "
Anderes Beispiel: "Select * from list where aage = '5' and atype ='f' "

Das zweite Query ist bestimmt aufwendiger als das Erste. Wie kann man das in O Kalkul ausdrucken?

Kann man auch irgendwie messen wieviel Zeit die Queries benötigen?

Vielen Dank
DhruvO-Kalkül? Deine Suchen dürfte linear in der Länge des durchsuchten Textes sein.

Zum Messen (http://www.phpclasses.org/browse/file/1378.html) gibt es da wohl einiges (http://www.developertutorials.com/tutorials/php/php-script-timer-051013/page1.html).

Da du offenbar XML parsen willst: einer der schon fertigen Parser geht nicht?

Also wenn wir mal davon ausgehen, dass dahinter ein ordentliches DBMS steht und sofern keine besonderen Indexe (also z.B. einer über age) bestehen, sind die Anfragen gleich schnell.In O auf jeden Fall.

mfg

rotalever
2009-08-06, 18:29:18
Je nach Datenstruktur zwischen O(1) und O(n) wobei n die Gesamtanzahl der Elemente ist.

Der_Donnervogel
2009-08-06, 23:57:10
Jetzt muss ich ein paar Queries darüber laufen lassen:
Ein Such Query ist z.B: "Select * from list where atype ='f' "
Anderes Beispiel: "Select * from list where aage = '5' and atype ='f' "

Das zweite Query ist bestimmt aufwendiger als das Erste. Wie kann man das in O Kalkul ausdrucken?

Kann man auch irgendwie messen wieviel Zeit die Queries benötigen?
Wenn es um Aufwand geht würde ich auf jeden Fall auch noch überprüfen ob der * beim SELECT wirklich nötig ist. Werden dort jedes mal viele Spalten ausgelesen die man nicht benötigt kostet das schnell viel mehr Performance als die paar Vergleiche im WHERE-Teil.

daflow
2009-08-07, 09:31:40
Wenn es um Aufwand geht würde ich auf jeden Fall auch noch überprüfen ob der * beim SELECT wirklich nötig ist. Werden dort jedes mal viele Spalten ausgelesen die man nicht benötigt kostet das schnell viel mehr Performance als die paar Vergleiche im WHERE-Teil.

Erstens das und 2. bringen die Einschränkungen durch where Bedingungen eher einen Performance Vorteil, wenn dadurch ein index verwendet werden kann (zumindest ab einer gewissen Anzahl Datensätze und vorausgesetzt die Statistikwerte für die Tabelle un deren Indizes sind auf einem halbwegs aktuellen Stand und die Pages sind nicht allzu fragmentiert)

Der_Donnervogel
2009-08-07, 14:55:03
Erstens das und 2. bringen die Einschränkungen durch where Bedingungen eher einen Performance Vorteil, wenn dadurch ein index verwendet werden kann (zumindest ab einer gewissen Anzahl Datensätze und vorausgesetzt die Statistikwerte für die Tabelle un deren Indizes sind auf einem halbwegs aktuellen Stand und die Pages sind nicht allzu fragmentiert)Ich habe noch einmal einen zweiten Blick in den Eingangspost riskiert und hege die Vermutung dass die ganze Datenbankstruktur schlecht gemacht sein könnte. Aus den knappen Beispielen kann man es natürlich nicht 100%ig sagen, aber die Vermutung liegt nahe. Eine Tabelle mit Name "list" die scheinbar alle Daten als String enthält und immer komplett ausgelesen wird, schaut sehr nach Anfänger aus. Da passt auch gut ins Bild dass "age" als Spalte auftaucht und nicht ein Zeitpunkt aus dem dann das Alter abgeleitet werden kann. Ich vermute deshalb, dass es da noch jede Menge Optimierungspotential gibt und die eine oder andere WHERE-Bedingung sicher die geringste Sorge sein wird.