MySQL : ORDER BY ... Performance Probleme [erledigt]

Alles zum SQL-Dialekt

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

MySQL : ORDER BY ... Performance Probleme [erledigt]

Beitrag 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
MySQL_ORDER.JPG (169.6 KiB) 6928 mal betrachtet
man sieht die 18 Sec. :banghead:
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

Code: Alles auswählen

ORDER BY __Record
dauert es > 1 Sec.

was mache ich falsch ?
Zuletzt geändert von AUGE_OHR am Mi, 01. Okt 2014 9:27, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: MySQL : ORDER BY ... Performance Probleme

Beitrag 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.

Code: Alles auswählen

ORDER BY NR  // 1st PRIMARY KEY, 1st FIELD
-> "schnell"

Code: Alles auswählen

ORDER BY ONR // 2nd PRIMARY KEY, 2nd FIELD
-> "langsam"

Code: Alles auswählen

ORDER BY NN  // 3rd PRIMARY KEY, 3rd FIELD
-> "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
gruss by OHR
Jimmy
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: MySQL : ORDER BY ... Performance Probleme

Beitrag von Herbert »

Hallo Jimmy
Eentuell ist das LIMIT schuld? Könnte einen Scan über die ganze db verursachen.
Versuch es mal mit WHERE....
Grüsse Herbert
Immer in Bewegung...
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: MySQL : ORDER BY ... Performance Probleme

Beitrag 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?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MySQL : ORDER BY ... Performance Probleme

Beitrag 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 ?
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: MySQL : ORDER BY ... Performance Probleme

Beitrag von AUGE_OHR »

hi,

so wie es aussieht ist es die Table "amz" selbst ... :angry4:

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 :blob8:

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

Code: Alles auswählen

cAnsiToUtf8( ConvToAnsiCP(x))
"aufbereitet" habe damit die Umlaute stimmten.

Also Entwarnung ... das konnte einfach nicht sein das MySQL so was im normal Fall macht ! [-X
gruss by OHR
Jimmy
Antworten