Hallo,
für meine Anwendung stehen 3 verschiedene Datenbanktypen zur Verfügung. MySQL, MSSQL & Oracle. Für diverse Zwecke, um zB die Daten in einer Tabelle darstellen zu lassen oder in einer Combobox mit mehreren Spalten, muss ich das Resultset in ein 2D Array umwandeln.
Soweit so gut.
Da einige Stammdatentabellen schon einen größeren Umfang erreichen können habe ich zu Testzwecken eine Testtabelle in allen 3 Datenbanken erstellt mit jeweils 15.000 Einträgen.
In einem Test wandle ich nun das Resultset über 3 Spalten der Tabelle in ein 2D-Array um, um diese in einer ComboBox darstellen zu lassen (Um der Realität näher zu kommen selektiere ich aber nur 5.000 der 15.000 gesamten Datensätze).
Die 3 verschiedenen SQL - Server laufen auf VM Maschinen mit derselben Hardware, selbes Betriebssystem, keine andere Software!
Hier die Ausgaben der Zeitmessungen für die Umwandlungen in das Array:
ORACLE: select sysid, suchkuerzel, name from adresse where status = 1 and istdivsatz is false and istspediteur is true; >> 5000 rows with 3 columns: 2194ms
MSSQL: select sysid, suchkuerzel, name from adresse where status = 1 and istdivsatz is false and istkunde is true; >> 5000 rows with 3 columns: 284ms
MYSQL: select sysid, suchkuerzel, name from adresse where status = 1 and istdivsatz is false and istrechempf is true; >> 5000 rows with 3 columns: 12ms
Das ganze habe ich mehrmals durchlaufen lassen und kam immer wieder auf so ziemlich selbe Zeiten. MSSQL ist ein wenig langsamer aber vollkommen aktzeptabel.
Warum ist ORACLE so langsam? Ich habe mich bereits über die FetchSize erkundigt, welche man mittels setFetchSize setzen kann, aber wenn ich diesen auf 5000 setze, dauert es nochmals viel viel länger, bei einer Fetchsize von 100-1000 sinkt die Zeit auf mindestens 1500 ms, also immernoch ein wesentlicher Unterschied zu MYSQL / MSSQL und meines Erachtens noch viel zu langsam.
Die Tabellen sind in allen 3 Datenbanken gleich aufgebaut:
PrimaryKey auf sysid, Indizes auf diversen Spalten wie auch auf jene die dort gefiltert werden.
Danke
für meine Anwendung stehen 3 verschiedene Datenbanktypen zur Verfügung. MySQL, MSSQL & Oracle. Für diverse Zwecke, um zB die Daten in einer Tabelle darstellen zu lassen oder in einer Combobox mit mehreren Spalten, muss ich das Resultset in ein 2D Array umwandeln.
Soweit so gut.
Da einige Stammdatentabellen schon einen größeren Umfang erreichen können habe ich zu Testzwecken eine Testtabelle in allen 3 Datenbanken erstellt mit jeweils 15.000 Einträgen.
In einem Test wandle ich nun das Resultset über 3 Spalten der Tabelle in ein 2D-Array um, um diese in einer ComboBox darstellen zu lassen (Um der Realität näher zu kommen selektiere ich aber nur 5.000 der 15.000 gesamten Datensätze).
Die 3 verschiedenen SQL - Server laufen auf VM Maschinen mit derselben Hardware, selbes Betriebssystem, keine andere Software!
Hier die Ausgaben der Zeitmessungen für die Umwandlungen in das Array:
ORACLE: select sysid, suchkuerzel, name from adresse where status = 1 and istdivsatz is false and istspediteur is true; >> 5000 rows with 3 columns: 2194ms
MSSQL: select sysid, suchkuerzel, name from adresse where status = 1 and istdivsatz is false and istkunde is true; >> 5000 rows with 3 columns: 284ms
MYSQL: select sysid, suchkuerzel, name from adresse where status = 1 and istdivsatz is false and istrechempf is true; >> 5000 rows with 3 columns: 12ms
Das ganze habe ich mehrmals durchlaufen lassen und kam immer wieder auf so ziemlich selbe Zeiten. MSSQL ist ein wenig langsamer aber vollkommen aktzeptabel.
Warum ist ORACLE so langsam? Ich habe mich bereits über die FetchSize erkundigt, welche man mittels setFetchSize setzen kann, aber wenn ich diesen auf 5000 setze, dauert es nochmals viel viel länger, bei einer Fetchsize von 100-1000 sinkt die Zeit auf mindestens 1500 ms, also immernoch ein wesentlicher Unterschied zu MYSQL / MSSQL und meines Erachtens noch viel zu langsam.
Die Tabellen sind in allen 3 Datenbanken gleich aufgebaut:
PrimaryKey auf sysid, Indizes auf diversen Spalten wie auch auf jene die dort gefiltert werden.
Danke