Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Datenbankabfrage dauert 13 Sekunden (https://www.delphipraxis.net/154556-datenbankabfrage-dauert-13-sekunden.html)

youuu 15. Sep 2010 14:59

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.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))';
DSListe = TUniTable.

mkinzler 15. Sep 2010 15:00

AW: Datenbankabfrage dauert 13 Sekunden
 
Nimm besser ein Query. Den so werden alle 300000DS an den Client übertragen und dort gefiltert

youuu 15. Sep 2010 15:09

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))

Bernhard Geyer 15. Sep 2010 15:20

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?

Stevie 15. Sep 2010 15:28

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?

generic 15. Sep 2010 15:49

AW: Datenbankabfrage dauert 13 Sekunden
 
Code:
SELECT * FROM `links`,`kundendaten`
Das ist ein kartesisches Produkt.

DeddyH 15. Sep 2010 15:53

AW: Datenbankabfrage dauert 13 Sekunden
 
Ohne WHERE-Klausel wäre es das.
SQL-Code:
SELECT * FROM `links`,`kundendaten`
WHERE (links.link_id = data.link_id) ...
Allerdings gehe ich jetzt davon aus, dass es sich um einen C&P-Fehler handelt und data und kundendaten dasselbe sind.

rollstuhlfahrer 15. Sep 2010 15:55

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:
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))
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).

Bernhard

mkinzler 15. Sep 2010 15:58

AW: Datenbankabfrage dauert 13 Sekunden
 
Zitat:

Schneller gehts dann nur mit JOINS.
Hat er doch, allerdings einen impliziten

Bernhard Geyer 15. Sep 2010 16:05

AW: Datenbankabfrage dauert 13 Sekunden
 
Zitat:

Zitat von generic (Beitrag 1049851)
Code:
SELECT * FROM `links`,`kundendaten`
Das ist ein kartesisches Produkt.

MySQL sollte nicht zusammenbrechen wenn der JOIN im Where ((links.link_id = data.link_id) ) kommt.
Es ist aber sinnvoll die SQL-Join-Syntax zu verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz