Guten Morgen alle...
Ich hätte da gern mal ein Verständnisproblem...
Gegebenheiten:
Tabelle mit 21 Mio Datensätzen
Delphi-Quellcode:
CREATE TABLE T_RECORD_DATA (
F_PARAMETER_ID ID /* ID = INTEGER NOT NULL */,
F_TIMESTAMP_UNIX INTEGER_NORMAL /* INTEGER_NORMAL = INTEGER NOT NULL */,
F_POWER_STATE INTEGER_NORMAL /* INTEGER_NORMAL = INTEGER NOT NULL */,
F_VALUE STRING10 /* STRING10 = VARCHAR(10) NOT NULL */
Indizies
Delphi-Quellcode:
ALTER TABLE T_RECORD_DATA ADD CONSTRAINT FK_T_RECORD_DATA_1 FOREIGN KEY (F_PARAMETER_ID) REFERENCES T_DEVICE_PARAMETERS (ID) ON DELETE CASCADE ON UPDATE CASCADE;
CREATE INDEX T_RECORD_DATA_IDX1 ON T_RECORD_DATA (F_TIMESTAMP_UNIX);
... alle Datensätze bei bestehendem Index eingefügt.
SQL
select first 10 * from T_RECORD_DATA where F_timestamp_unix = (select max(F_timestamp_unix) from t_record_data)
Problem:
Ausführungszeit = 36s 926ms ... absolut inakzeptabel
Leistungsanalyse:
siehe Bild und
Delphi-Quellcode:
------ Leistungsinformation ------
Prepare time = 31ms
Ausführungszeit = 36s 926ms
Avg fetch time = 3.692,60 ms
Current memory = 17.699.664
Max memory = 17.901.376
Memory buffers = 1.024
Reads from disk to cache = 82.953
Writes from cache to disk = 0
Fetches from cache = 43.527.070
Die Frage:
Warum greift der Index nicht? Wo ist der Denkfehler?