Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MySql Abfragezeit (https://www.delphipraxis.net/161584-mysql-abfragezeit.html)

youuu 11. Jul 2011 08:10

Datenbank: MySql • Version: 5 • Zugriff über: Devart

MySql Abfragezeit
 
Hi,

ich habe solch eine Abfrage

Delphi-Quellcode:
Query.SQL.Text := 'Select K.kd, K.aufrufe, K.EintragsD, K.link, K.Link_id, K.firmenname, K.AufrufD, K.bearbeiter '+
                        'FROM '+DB_1+' AS K '+
                        'WHERE not exists ( select link_id FROM '+DB_2+' WHERE (link_id = K.link_id) AND (bearbeiter LIKE :bearbeiter) ) '+
                        'ORDER BY RAND()';
die Tabelle "DB_1" hat insgesamt 12.000 Ergebisse und die Tabelle "DB_2" ca. 2.000 und steigend. Indizes sind gesetzt, dennoch dauert die Abfrage 40 Sekunden.

Hat jemand einen Geschwindigkeits Boost?

FredlFesl 11. Jul 2011 08:17

AW: MySql Abfragezeit
 
'ORDER BY RAND()' ist auch nicht schlecht. Performanceoptimierend wirkt sich das nicht aus.

Und dann würde ich es mal mit einem LEFT JOIN probieren, also
SQL-Code:
select * 
  from DB_1 k
    left join DB_2 x on k.link_ID = x.link_ID and bearbeiter like :bearbeiter
where x.link_ID is null
Ich muss zugeben, bei LEFT JOINS die Datensätze zu filtern, die gerade *nicht* passen, ist nicht so einfach. ich glaub aber, so sollte es klappen. Vielleicht musst Du die Bearbeiter-Klausel ins WHERE verschieben.

youuu 11. Jul 2011 08:24

AW: MySql Abfragezeit
 
Das ORDER BY RAND() nicht Perfomance unterstützend ist weiß ich, ich brauch aber die Ergebnisse ungeordnet.

Durch diese Abfrage wird leider der Query auch nicht schneller

rollstuhlfahrer 11. Jul 2011 08:58

AW: MySql Abfragezeit
 
Zitat:

Zitat von youuu (Beitrag 1111084)
ich brauch aber die Ergebnisse ungeordnet.

Dann gib einfach nicht an, dass du was sortiert haben willst. MySQL-Datenbanken sind bei intensiver Benutzung alles andere als sortiert.

Bernhard

youuu 11. Jul 2011 09:04

AW: MySql Abfragezeit
 
Wenn ich es weglasse wären es 10 Sek ersparnis, das heißt es benötigt immer noch 30 - 35 Sekunden. Was ich finde doch argh lang ist.

rollstuhlfahrer 11. Jul 2011 09:08

AW: MySql Abfragezeit
 
SQL-Code:
Select K.kd, K.aufrufe, K.EintragsD, K.link, K.Link_id, K.firmenname, K.AufrufD, K.bearbeiter
FROM DB_1 AS K
WHERE k.link_id not in (select x.link_id FROM DB_2 AS x WHERE (x.bearbeiter LIKE :bearbeiter))
Das wäre noch ein Versuch wert.

Bernhard

DeddyH 11. Jul 2011 09:09

AW: MySql Abfragezeit
 
Muss es wirklich LIKE sein? Wenn der entsprechende Wert auch noch mit einer Wildcard beginnt, dann kann kein Index mehr greifen.

youuu 11. Jul 2011 09:13

AW: MySql Abfragezeit
 
Ohje tatsache ohne Like mit wildcard hab ich ganze 20 Sekunden gespart


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 Uhr.

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