Seite 1 von 1
MySQL : ORDER BY ... Performance Probleme [erledigt]
Verfasst: Mi, 01. Okt 2014 2:16
von AUGE_OHR
hi,
sobald ich ORDER BY in ein SELECT aufnehme geht die Performance in die Knie.
das betrifft nicht nur die native Schnittstelle sondern kann in der Workbench reproduziert werden.
- MySQL_ORDER.JPG (169.6 KiB) 7134 mal betrachtet
man sieht die 18 Sec.
ein Index habe ich, jedoch ist es nicht der PRIMARY KEY.
auch wenn ich ORDER BY auf eine andere Column, ohne Index, lege wird es nicht schneller/langsamer ?
Index hab ich in der Workbench angelegt
nur wenn ich den PRIMARY KEY als Order nehme
dauert es > 1 Sec.
was mache ich falsch ?
Re: MySQL : ORDER BY ... Performance Probleme
Verfasst: Mi, 01. Okt 2014 6:17
von AUGE_OHR
nachdem ich raus gefunden habe das es mit dem PRIMARY KEY "schnell" geht dachte ich mir : nimm statt Index dann PRIMARY KEY.
-> "schnell"
-> "langsam"
-> "langsam"
also das geht auch nicht richtig ... hm
nun alle PRIMARY KEY raus und Index auf das erste FIELD mit UNIQUE -> "schnell"
na dachte ich mir dann jetzt das 2nd Feld und da sagt er es wäre nicht UNIQUE ...
na gut dachte ich aber leider ist das dann auch "langsam"
bei weitern probieren stelle sich raus das nur FIELDs welche UNIQUE waren auch "schnell" sind ... hm
nun wollte ich wenigstens die paar Index versuchen, wobei ich keins als PRIMARY KEY definiert habe !
trotzdem macht er mir beim ersten FIELD Treffer ein PK daraus ... und nur noch "das" ist "schnell"
irgendwie läuft was gewaltig schief ... nur wo fange ich an zu suchen ?
p.s. die Versuche hab ich alle in der MySQL Workbench gemacht
Re: MySQL : ORDER BY ... Performance Probleme
Verfasst: Mi, 01. Okt 2014 7:40
von Herbert
Hallo Jimmy
Eentuell ist das LIMIT schuld? Könnte einen Scan über die ganze db verursachen.
Versuch es mal mit WHERE....
Re: MySQL : ORDER BY ... Performance Probleme
Verfasst: Mi, 01. Okt 2014 7:57
von georg
Hallo, Jimmy -
mir steht im Moment keine entsprechend grosse Tabelle zur Verfügung - hast Du mal einen EXPLAIN versucht?
Meine Versuche (Tabelle hat ca. 30.000 Sätze) mit OFFSET, LIMIT liegen alle im Bereich von 0,01 bis 0,66 Sekunden.
Wie sieht Deine my.cnf aus? Welche Werte hast Du dort eingestellt? Auf welchem Speichermedium liegen die Daten (bei mir hier ist es eine SSD). Hast Du mal den Versuch in der Konsole (mysql.exe) nachvollzogen?
Re: MySQL : ORDER BY ... Performance Probleme
Verfasst: Mi, 01. Okt 2014 8:16
von brandelh
Ich habe wirklich keine so großen Tabellen auf meinem MySQL Server (und keine Messwerte zur Hand),
aber ob mit oder ohne Index dürfte ORDER BY für die reine Datensuche keine Rolle spielen,
denn da wir ja zuerst die WHERE Klausel ausgewertet.
Wenn man es bedenkt dürfte erst das interne Resultset von ORDER BY sortiert werden ...
wenn das aber zu "groß" ist könnte der Speicher des SQL Servers ein Problem werden.
Oder übersehe ich da was ?
Re: MySQL : ORDER BY ... Performance Probleme
Verfasst: Mi, 01. Okt 2014 9:27
von AUGE_OHR
hi,
so wie es aussieht ist es die Table "amz" selbst ...
ich habe nun auch mein PostgreSQL Import Modul auf MySQL umgeschrieben.
nun bin ich diesmal den langsamen Weg gegangen
Code: Alles auswählen
USE &xdbf via &xrdd EXCLUSIVE
aStrut := DBSTRUCT()
IF !(oCon:ExistTables(xtab))
if !(oCon:CreateTable( xtab,aStrut))
msgbox('Error create Table '+xtab)
return
endif
endif
oTbl := MyResult():New(oCon,,xtab)
if oTbl:OpenRecord()
GO TOP
DO WHILE .NOT. ( EOF() .or. ::lAbort = .T. )
oTbl:aBuffer := (xtab)->(SCATTER())
oTbl:Insert()
SKIP
ENDDO
endif
nachdem ich das DATETIME zum Type "D" in FieldType(nNum) gemacht habe
Code: Alles auswählen
FUNCTION FieldType(nNum)
local cTypeXbase := "U"
do case
case nNum == MYSQL_TINY_TYPE
cTypeXbase := "L"
case nNum == MYSQL_DATE_TYPE .OR.;
nNum == MYSQL_DATETIME_TYPE
cTypeXbase := "D"
und "meine" DBF Datei genommen seit es mit INDEX und ORDER BY keine Probleme mehr zu geben
Ich muss nun mal überprüfen ob das LOAD DATA INFILE, was ja viel schneller geht, da ein Problem macht oder die komische DBF die ich mit
"aufbereitet" habe damit die Umlaute stimmten.
Also Entwarnung ... das konnte einfach nicht sein das MySQL so was im normal Fall macht !