![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
Doppel-Select-Anweisung zu langsam
Hallo Zusammen,
ich habe eine Tabelle mit ca 500.000 Datensätzen. Dort mache ich so eine Abfrage:
Delphi-Quellcode:
Ich mache die Abfrage deshalb so, weil es Aufträge gibt, bei denen nicht alle in 2012 abgeschlossen wurden, sondern nur die letzten. Von diesen Aufträgen möchte ich aber alle Arbeitsgänge mit rausbekommen.
Select * from Tabelle1 where SpalteA in (
Select SpalteA from Tabelle1 where SpalteDatum between '20120101' and '20121231') Leider schmiert mit der MySQL-Server bei dieser Abfrage ab. Wie würdet Ihr das lösen? Vielen Dank Patrick |
AW: Doppel-Select-Anweisung zu langsam
Jetzt krieg ich wieder Haue weil ich keine Ansi-Joins verwende
Code:
Gruß
select *
from Tabelle1 ,(select spalteA from Tabelle1 where Bedingung) BedTable where Tabelle1.Spaltea=BedTable.Spaltea K-H |
AW: Doppel-Select-Anweisung zu langsam
Hallo,
leider bringt auch diese Anweisung nach mehreren Minuten noch kein Ergebnis... Ist das so kompliziert für den SQL-Server oder warum funktioniert das nicht in einer halbwegs vernümftigen Zeit??? Gruß Patrick |
AW: Doppel-Select-Anweisung zu langsam
So müsste es auch gehen, wenn ich keinen Denkfehler mache:
SQL-Code:
Ggf. noch Indizes auf SpalteA und SpalteDatum setzen.
SELECT
A.* FROM Tabelle1 A JOIN Tabelle1 B ON B.SpalteA = A.SpalteA WHERE B.SpalteDatum BETWEEN '20120101' AND '20121231' |
AW: Doppel-Select-Anweisung zu langsam
Was mache ich hier nur???
Auch diese Lösung bringt nach mehreren Minuten kein Ergebnis... Gruß Patrick |
AW: Doppel-Select-Anweisung zu langsam
Wieviele Datensätze sind denn das insgesamt? Und stimmt das Datumsformat? Ich bin gerade nicht mehr sicher, wie das unter MySQL auszusehen hat, hast Du es mal mit SQL-Parametern probiert? Sind Indizes vorhanden?
|
AW: Doppel-Select-Anweisung zu langsam
Ich behaupte mal, das SQL Statement ist 2.rangig. Schließlich ist MySQL nicht mehr Version 2.0 doer so..
Die Indizierung ist entscheidend. Und was bedeutet "abschmieren", so ist das halt by full table scan ohne indizierung (Vermutung). Ok, vielleicht ist der mySQL optimizer tatsächlich so gestrickt. Notfalls mit dem Range select eine Temp Table bauen und die dann weiterverwenden, macht nur 2 Full Table scans. |
AW: Doppel-Select-Anweisung zu langsam
Jetzt hat sich der MySQL-Server vollendst abgeschossen...
Ich versuche es später. Vielen Dank erst mal Gruß und schönen Abend Patrick |
AW: Doppel-Select-Anweisung zu langsam
einfach mal die Statement Varianten mit
Code:
oder
explain [mysqlstatement]
Code:
aufrufen.
explain extended [mysqlstatement]
Ach nochwas, falls deine Spalte A (das Hauptjoinkriterium also?) offenbar nicht eindeutig ist, sondern nur sowas wie ein Gruppenschlüssel, solltest Du je nach Statement variante aus den vorschlägen noch ein 'distinct' oder 'group by' spendieren, sonst explodiert das Volumen tatsächlich, bei 500T Sätzen sicher unangenehm. Möglicherweise fallen Dir ja auch noch andere Kriterien ein, die das ganze etwas eindampfen. |
AW: Doppel-Select-Anweisung zu langsam
Ich würde mir mal den Server genauer anschauen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 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