Performancefrage

Performancefrage

am 10.01.2007 16:56:42 von Stephan Dreisbach

Hallo,

ist es eigentlich bei einer Abfrage unter Einbezug anderer Tabellen
ein Unterschied im Tempo, ob ich so

select * from Aufgaben where Nr not in (select AufNr from tempAufgaben
where SchNr='$Usernr' and Datum like '$Heute') and Nr not in (select
Aufgabennr from richtigeAufgaben where Schuelernr='$Usernr' and
Anzahl=3) and Aufgabenart<>'Knobelaufgabe' and
Aufgabenart<>'Geometrie' and richtig/Anzahl>=$leicht and
richtig/Anzahl<=$schwer and frei like 'j' and Loesung<>'-' order by
Nr

oder so

select * from Aufgaben where Aufgabenart<>'Knobelaufgabe' and
Aufgabenart<>'Geometrie' and richtig/Anzahl>=$leicht and
richtig/Anzahl<=$schwer and frei like 'j' and Loesung<>'-' and Nr not
in (select AufNr from tempAufgaben where SchNr='$Usernr' and Datum
like '$Heute') and Nr not in (select Aufgabennr from richtigeAufgaben
where Schuelernr='$Usernr' and Anzahl=3) and order by Nr

abfrage?

Re: Performancefrage

am 10.01.2007 17:04:28 von Christian Kirsch

Stephan Dreisbach schrieb:
> Hallo,
>
> ist es eigentlich bei einer Abfrage unter Einbezug anderer Tabellen
> ein Unterschied im Tempo, ob ich so
>
> select * from Aufgaben where Nr not in (select AufNr from tempAufgaben
> where SchNr='$Usernr' and Datum like '$Heute') and Nr not in (select
> Aufgabennr from richtigeAufgaben where Schuelernr='$Usernr' and
> Anzahl=3) and Aufgabenart<>'Knobelaufgabe' and
> Aufgabenart<>'Geometrie' and richtig/Anzahl>=$leicht and
> richtig/Anzahl<=$schwer and frei like 'j' and Loesung<>'-' order by
> Nr
>
> oder so
>
> select * from Aufgaben where Aufgabenart<>'Knobelaufgabe' and
> Aufgabenart<>'Geometrie' and richtig/Anzahl>=$leicht and
> richtig/Anzahl<=$schwer and frei like 'j' and Loesung<>'-' and Nr not
> in (select AufNr from tempAufgaben where SchNr='$Usernr' and Datum
> like '$Heute') and Nr not in (select Aufgabennr from richtigeAufgaben
> where Schuelernr='$Usernr' and Anzahl=3) and order by Nr
>
> abfrage?

Ist es? Wie wäre es, wenn Du das einfach ausprobierst? Weder kennt hier
jemand Deine Daten noch verrätst Du irgendwas über Dein Modell. Also
wäre es doch wohl am Besten, wenn Du erstmal selbst den Versuch
unternimmst, MySQL diese Abfragen ausführen zu lassen.

Als ich das letzte Mal geguckt habe, hat der Server automatisch
verraten, wie lange er für eine Query braucht. Wenn Dir diese
Information nicht reicht, kannst Du immer noch EXPLAIN bemühen.

Re: Performancefrage

am 10.01.2007 17:20:54 von Robert Klemme

On 10.01.2007 17:04, Christian Kirsch wrote:
> Stephan Dreisbach schrieb:
>> Hallo,
>>
>> ist es eigentlich bei einer Abfrage unter Einbezug anderer Tabellen
>> ein Unterschied im Tempo, ob ich so
>>
>> select * from Aufgaben where Nr not in (select AufNr from tempAufgaben
>> where SchNr='$Usernr' and Datum like '$Heute') and Nr not in (select
>> Aufgabennr from richtigeAufgaben where Schuelernr='$Usernr' and
>> Anzahl=3) and Aufgabenart<>'Knobelaufgabe' and
>> Aufgabenart<>'Geometrie' and richtig/Anzahl>=$leicht and
>> richtig/Anzahl<=$schwer and frei like 'j' and Loesung<>'-' order by
>> Nr
>>
>> oder so
>>
>> select * from Aufgaben where Aufgabenart<>'Knobelaufgabe' and
>> Aufgabenart<>'Geometrie' and richtig/Anzahl>=$leicht and
>> richtig/Anzahl<=$schwer and frei like 'j' and Loesung<>'-' and Nr not
>> in (select AufNr from tempAufgaben where SchNr='$Usernr' and Datum
>> like '$Heute') and Nr not in (select Aufgabennr from richtigeAufgaben
>> where Schuelernr='$Usernr' and Anzahl=3) and order by Nr
>>
>> abfrage?
>
> Ist es? Wie wäre es, wenn Du das einfach ausprobierst? Weder kennt hier
> jemand Deine Daten noch verrätst Du irgendwas über Dein Modell. Also
> wäre es doch wohl am Besten, wenn Du erstmal selbst den Versuch
> unternimmst, MySQL diese Abfragen ausführen zu lassen.
>
> Als ich das letzte Mal geguckt habe, hat der Server automatisch
> verraten, wie lange er für eine Query braucht. Wenn Dir diese
> Information nicht reicht, kannst Du immer noch EXPLAIN bemühen.

Zusatz-Rant: eine ordentliche Formatierung der SQL-Statements macht es
den geneigten Lesern dieses Forums deutlich leicher.

Und wieder zurück zur Sachebene: "select *" sollte man in Produktion nie
verwenden. Der Unterschied zwischen "select *" und "select foo, bar"
kann signifikant sein!

Ciao

robert

Re: Performancefrage

am 10.01.2007 17:23:59 von Stephan Dreisbach

Christian Kirsch schrieb:

[..]
>
>Ist es? Wie wäre es, wenn Du das einfach ausprobierst? Weder kennt hier
>jemand Deine Daten noch verrätst Du irgendwas über Dein Modell. Also
>wäre es doch wohl am Besten, wenn Du erstmal selbst den Versuch
>unternimmst, MySQL diese Abfragen ausführen zu lassen.
>
>Als ich das letzte Mal geguckt habe, hat der Server automatisch
>verraten, wie lange er für eine Query braucht. Wenn Dir diese
>Information nicht reicht, kannst Du immer noch EXPLAIN bemühen.

na ja, so als Anfänger habe ich das schon mal versucht zeitlich
festzuhalten und merke kaum einen Unterschied.

Mir geht es eher darum, ob es da Grundregeln gibt wie z.B. erst in der
Haupttabelle zu suchen und dann erst den Abgleich mit anderen Tabellen
durchzuführen oder erst den Abgleich mit anderen Tabellen zu machen
und dann in der Haupttabelle weiter zu suchen.

Re: Performancefrage

am 10.01.2007 17:44:41 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Performancefrage

am 10.01.2007 17:48:25 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)