Chris82: SELECT-Abfrage bei MySQL-Tabelle dauert zu lange

Beitrag lesen

Hi Leutz,

ich habe eine MySQL-Tabelle, welche sehr grosse Datenmengen im siebenstelligen Bereich beinhaltet. Diese Tabelle hat folgende Struktur:

CREATE TABLE IF NOT EXISTS hisdata (
  ID bigint(10) NOT NULL AUTO_INCREMENT,
  CURRENCY varchar(10) NOT NULL,
  TIMESTAMP bigint(30) NOT NULL,
  BID double NOT NULL,
  ASK double NOT NULL,
  PRIMARY KEY (ID),
  KEY index\_ts (TIMESTAMP),
  KEY index\_curr (CURRENCY),
  KEY TIMESTAMP (TIMESTAMP),
  KEY CURRENCY (CURRENCY)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6559667 ;

Wenn ich auf diese Tabelle nun eine SELECT-Abfrage wie:

SELECT * FROM hisdata WHERE CURRENCY = 'EURUSD' AND TIMESTAMP >= 633 347424000000000 AND TIMESTAMP <= 633398400000000000 ORDER BY TIMESTAMP ASC LIMIT 0,100000

ausführe, dauert das extrem lange. Für 100000 Datensätze braucht er ca. 10 Sekunden. Das muss deutlich schneller gehen. Ich habe, wie bereits zu sehen ist, Indizes auf die Spalten CURRENCY und TIMESTAMP gesetzt, da nach den Werten dieser Spalten auch gesucht wird. Leider hat das zu vorher auch keine grossen Performance-Verbesserungen gebracht. Hat jemand von Euch eine Idee, wie man die Performance hier steigern kann? Bin für jeden Tip dankbar.

Gruß,
Chris