mysql: Etwas serverlastige Abfrage
Francis
- datenbank
Hallo,
Leider dauert es recht lange, bis ich über nachfolgende Abfrage innerhalb von knapp 100.000 Einträgen ein Ergebnis erziele.
Ich wüßte aber nicht, wie ich die optimieren könnte, außer, indem ich die Suche mitsamt Frontend ändere.
SELECT
a.KID,
l.Name,
a.Nummer
FROM table a
INNER JOIN table l ON a.LID = l.KID
AND l._prae1 = "1"
AND l._active = "1"
WHERE
a.Nummer LIKE '%Suchbegriff%' OR
l.Name LIKE '%Suchbegriff%' OR
a.Bem LIKE '%Suchbegriff%' OR
a.Kat LIKE '%Suchbegriff%' OR
a.Stat LIKE '%Suchbegriff%'
ORDER BY a.Nummer LIMIT 0, 40
Gibt es eine Möglichkeit, die Abfrage optimaler zu gestalten?
Viele Grüße, Franz
Hallo Francis,
Ich wüßte aber nicht, wie ich die optimieren könnte, außer, indem ich die Suche mitsamt Frontend ändere.
WHERE
a.Nummer LIKE '%Suchbegriff%' OR
[...]
a.Stat LIKE '%Suchbegriff%'
ORDER BY a.Nummer LIMIT 0, 40
LIKE %irgendwas% ist immer unperformant.
> Gibt es eine Möglichkeit, die Abfrage optimaler zu gestalten?
Du solltest die [Volltextsuche](http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html) nutzen.
Freundliche Grüße
Vinzenz
moin,
Ich wüßte aber nicht, wie ich die optimieren könnte, außer, indem ich die Suche mitsamt Frontend ändere.
wieviele datensätze bekommst du den als ergebnis zurück, welche indexe liegen auf der tabelle, erzähle mal ein wenig mehr mit worten, was die suche machen solle und die tabelle beschaffen ist.
Ilja
wieviele datensätze bekommst du den als ergebnis zurück, welche indexe liegen auf der tabelle, erzähle mal ein wenig mehr mit worten, was die suche machen solle und die tabelle beschaffen ist.
Ilja
Hi Ilja,
also, das Problem scheint gelöst. ich habe festgestellt, dass diese imensen Zeiten genau dann Zustande kommen, wenn ich über einen Index in eine andere tabelle gehe.
Sobald ich die Suche innerhalb der Haupttabelle lasse, gehts wieder sehr schnell. Und es ist möglich, innerhalb der Haupttabelle zu bleiben.
Dennoch stelle ich zugleich 2 Dinge fest, bzw. 1 stelle ich fest, eine 2. frage ich mal hier nach:
Kann ich das gleich anwenden oder verstehe ich das recht, dass ich erstmal einen Index hierfür anlegen muss?
Grüße, Franz
Hi,
- select count(*) ist markant schneller als mysql_num_rows
Natürlich.
Schliesslich müssen erst mal alle Datensätze vom MySQL-Server an PHP übergeben werden, bevor mysql_num_rows deren Anzahl ermitteln kann.
SELECT COUNT hingegen ermittelt einen Zahlwert, und übergibt diesen an PHP.
- Wie genau funktioniert full-text-suche
http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html
Kann ich das gleich anwenden oder verstehe ich das recht, dass ich erstmal einen Index hierfür anlegen muss?
Letzteres.
MfG ChrisB
Kann ich das gleich anwenden oder verstehe ich das recht, dass ich erstmal einen Index hierfür anlegen muss?
Letzteres.
MfG ChrisB
Danke.
Noch eine Frage: Kann ich mysql anweisen, nach z.b. 500 gefundenen Datensätzen die Suche abzubrechen?
Bei LIMIT habe ich den Eindruck, dass mysql erst nach Beendigung der kompletten Suche auf die Ergebnismenge von 500 reduziert. Dann aber dauert die Suche zu lange.
Grüße, Franz
Hi,
bitte sinnvoll zitieren, nicht einfach alles!
Noch eine Frage: Kann ich mysql anweisen, nach z.b. 500 gefundenen Datensätzen die Suche abzubrechen?
M.W. nein.
Bei LIMIT habe ich den Eindruck, dass mysql erst nach Beendigung der kompletten Suche auf die Ergebnismenge von 500 reduziert.
Natürlich. Schliesslich erfolgt ja ggf. vorher auch noch eine Sortierung, und die erfordert, dass erst mal alle in Frage kommenden Datensätze vorliegen.
MfG ChrisB
Hi,
bitte sinnvoll zitieren, nicht einfach alles!
Das war sinnvoll, klar?!
Hi,
Das war sinnvoll, klar?!
Nein, war es nicht.
Grussformeln mit zu zitieren, ist bspw. im allgemeinen nicht sinnvoll - stell' dir vor, was für einen Rattenschwanz an solchen wir inzwischen hätten, wenn diese bei jeder Antwort hier im Thread übernommen worden wären.
MfG ChrisB
Hi,
Das war sinnvoll, klar?!
Nein, war es nicht.
Grussformeln mit zu zitieren, ist bspw. im allgemeinen nicht sinnvoll - stell' dir vor, was für einen Rattenschwanz an solchen wir inzwischen hätten, wenn diese bei jeder Antwort hier im Thread übernommen worden wären.MfG ChrisB
Kack hier an, wen immer Du willst, aber mich nicht nochmal, Bursche!
Hi,
Kack hier an, wen immer Du willst, aber mich nicht nochmal, Bursche!
Ich habe dich nicht angekackt, sondern dich höflich darauf hingewiesen, dass du bitte sinnvoll zitieren sollst.
Für jemanden, der Hilfe sucht, hast du kleines !&%$ eine verdammt grosse Klappe.
MfG ChrisB
Hi,
Kack hier an, wen immer Du willst, aber mich nicht nochmal, Bursche!
Ich habe dich nicht angekackt, sondern dich höflich darauf hingewiesen, dass du bitte sinnvoll zitieren sollst.
Für jemanden, der Hilfe sucht, hast du kleines !&%$ eine verdammt grosse Klappe.
MfG ChrisB
Hör mir zu, Zauberer. Du hast mich auf nichts hinzuweisen, klar?
Und mir ungerechtfertigt eine mit Ausrufezeichen versehene Aufforderung vor die Füße zu rotzen, glaubst Du hier machen zu können, weil Du mich nicht kennst.
Btw., 198cm sind gar nicht so klein sind, wie Du Dir das wünschst.
Hi,
Hör mir zu, Zauberer. Du hast mich auf nichts hinzuweisen, klar?
Und du mich nicht in diesem Ton aufzufordern, dir zuzuhören - auch klar?
Und mir ungerechtfertigt eine mit Ausrufezeichen versehene Aufforderung vor die Füße zu rotzen, glaubst Du hier machen zu können, weil Du mich nicht kennst.
Weil ...? Wenn ich dich kennen würde, wüsste ich, dass man mit dir keine vernünftige Unterhaltung führen kann?
Btw., 198cm sind gar nicht so klein sind, wie Du Dir das wünschst.
Aha, du bist also ein grosser Kerl, den man nicht auffordern darf, sich vernünftig zu benehmen.
Was machst du eigentlich mit Datenbanken? Mir scheint, als Türsteher wärst du geeigneter (oder in einer vergleichbaren Profession, wo du dein Hirn komplett abschalten und dich rein auf Körpergrösse verlassen kannst).
MfG ChrisB
Hast du eigentlich noch alle?
Hast du deine Hausaufgaben zu spät gemacht bekommen und jetzt führst du dich deswegen auf wie Rotz?
Schreib doch bei deiner nächsten Frage (wo du sicher einen anderen Namen verwendest) dazu hey Leute ich bin das ... von damals. Nur damit dir nicht aus Versehen nochmal jemand wsa antwortet.
Hast du eigentlich noch alle?
Noch alle _was_? Bediene Dich neben der vollständigen Grammatik bitte den Tips für Fragestellern.
Schreib doch bei deiner nächsten Frage (wo du sicher einen anderen Namen verwendest) dazu hey Leute ich bin das ... von damals. Nur damit dir nicht aus Versehen nochmal jemand wsa antwortet.
Ich wüßte nicht, wann Du Franz jemals geantwortet haben könntest. Und ChrisB. (oder seine Vorgängeraccounts) sollten darüber nachdenken, warum sie hier immer wieder in Konflikt mit anderen Usern kommen. Vielleicht kauft er sich ja mal nen Knigge. Gebrauchen könnte er ihn.
Grüße, Neu :-P
Hallo "Neu". Wie unauffällig!
Ich wüßte nicht, wann Du Franz jemals geantwortet haben könntest.
Hab ich auch noch nicht. Ich wollt nur vermeiden dass ich es mal tu.
* Automatische Forenmessage für Geheimdienstler *
Bitte bei der nächsten Antwort unbedingt einen anderen Namen wählen. Am besten "Neu" gefolgt von einer beliebigen Zahl. Andernfalls kann nicht garantiert werden dass deine Anonymität gewahrt bleibt.
Hallo "Neu". Wie unauffällig!
Aber echt. Und dann auch noch ein :-P hinter seinem Nick. Unauffälliger gehts echt nimmer.
Neuer :-P :-P
Hallo "Neu". Wie unauffällig!
Aber echt. Und dann auch noch ein :-P hinter seinem Nick. Unauffälliger gehts echt nimmer.
Neuer :-P :-P
War doch klar, dass Du ihm auf die Schliche kommst.
Am Neuesten :-P :-P :-P
moin,
Sobald ich die Suche innerhalb der Haupttabelle lasse, gehts wieder sehr schnell. Und es ist möglich, innerhalb der Haupttabelle zu bleiben.
abfragen sind immer als ganzes zu sehen, vor allem wenn es um tuning geht. insofern wäre es gut, wenn du die benötigten infos dazu gibst, sonst ist es schwierig zu helfen.
Ilja