![]() |
Datenbank: mysql • Version: 5.x • Zugriff über: devart
Datenbankabfrage dauert 13 Sekunden
Hallo,
ich beziehe ca. 4.000 Datensätze aus einer MySQL Tabelle, welche ca. 300.000 Datensätze aufweißt. Allerdings dauert diese Abfrage 13 Sekunden. Wie kann ich diese verbessern, ohne vorerst in der MySQL Tabelle selber rum zu fuchteln. Hier die Abfrage:
Delphi-Quellcode:
DSListe = TUniTable.DSListe.TableName := '`links`,`kundendaten`'; DSListe.FilterSQL := '(links.link_id = data.link_id) and (links.aufrufe <= 2) and (links.eintrag <> ''delete'') and ((links.date = date1) or (links.date = date2))'; |
AW: Datenbankabfrage dauert 13 Sekunden
Nimm besser ein Query. Den so werden alle 300000DS an den Client übertragen und dort gefiltert
|
AW: Datenbankabfrage dauert 13 Sekunden
Sollte eigentlich nicht, denn die Abfrage von UniTable sieht so aus
Delphi-Quellcode:
SELECT * FROM `links`,`kundendaten`
WHERE (links.link_id = data.link_id) and (links.aufrufe <= 2) and (links.eintrag <> ''delete'') and ((links.date = date1) or (links.date = date2)) |
AW: Datenbankabfrage dauert 13 Sekunden
Wie groß ist die Datenbanktabelle?
Gibt es Indexe auf die Where-Felder? Wie viel Speicher (RAM) darf sich der Server "genehmigen" Virenscanner für die DB-Dateien deaktiviert? |
AW: Datenbankabfrage dauert 13 Sekunden
Beinhalten die 13 Sekunden auch den Verbindungsaufbau zur Datenbank oder steht die schon vorher?
Nur bei der ersten Ausführung innerhalb einer Session oder jedesmal? |
AW: Datenbankabfrage dauert 13 Sekunden
Code:
Das ist ein kartesisches Produkt.
SELECT * FROM `links`,`kundendaten`
|
AW: Datenbankabfrage dauert 13 Sekunden
Ohne WHERE-Klausel wäre es das.
SQL-Code:
Allerdings gehe ich jetzt davon aus, dass es sich um einen C&P-Fehler handelt und data und kundendaten dasselbe sind.
SELECT * FROM `links`,`kundendaten`
WHERE (links.link_id = data.link_id) ... |
AW: Datenbankabfrage dauert 13 Sekunden
Schneller gehts dann nur mit JOINS. Die brauchen auch wesentlich weniger Server-Ressourcen. Das sieht dann so ähnlich aus:
SQL-Code:
Bei deinen Abfragen war übrigens ein Fehler drinnen, der oben beseitigt ist. Wenn du die Tabelle Kundendaten meinst, dann darfst du nicht später diese Tabelle mit data ansprechen. Der MySql-Server sollte diese dann nicht finden. Es würde mich wundern, wenn du mit diesem Query mehr als 1 Ergebnis bekommst (nämlich das Syntax-Fehler-Ergebnis).
SELECT * FROM `links` INNER JOIN `kundendaten`.`link_id` ON `links`.`link_id` WHERE (links.aufrufe <= 2) and (links.eintrag <> ''delete'') and ((links.date = date1) or (links.date = date2))
Bernhard |
AW: Datenbankabfrage dauert 13 Sekunden
Zitat:
|
AW: Datenbankabfrage dauert 13 Sekunden
Zitat:
Es ist aber sinnvoll die SQL-Join-Syntax zu verwenden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz