2 Stimmen

Optimiere Abfragen für Tabellen mit großen Textspalten (15k - 5000k)

Mein Tisch:

CREATE TABLE `html` (
  `html_id` int(10) unsigned NOT NULL,
  `links_id` int(10) unsigned NOT NULL,
  `url` varchar(2000) DEFAULT NULL,
  `tld` varchar(10) DEFAULT NULL,
  ....
  `html` mediumtext  
  PRIMARY KEY (`html_id`,`links_id`),
  UNIQUE KEY `links_id_url_index` (`links_id`,`url`(255))
) DEFAULT CHARSET=utf8;
  • es hat insgesamt > 20 GB Daten (~1 Mio. Zeilen)
  • Abfragen sind hauptsächlich für Statistiken und erfordern nicht die html Spalte
  • z.B.: SELECT tld, MAX(URL), count(*) FROM html GROUP BY tld

auch muss der Tisch viele Inserts (>500/s) von einem mehrfädigen c++ Web-Crawler mit den Schlüsselüberprüfungen (html_id,links_id) & (links_id,url(255)) aushalten, und in dieser Konfiguration funktioniert es gut, aber indem andere Schlüssel hinzugefügt werden, befürchte ich, dass es langsamer werden könnte.

Bei all meinen Tests scheint die große html Spalte die Ursache für langsame Abfragen zu sein, wie gehe ich am besten damit um?

1voto

Maxim Krizhanovsky Punkte 25210

Verschiebe die html-Spalte in eine andere Tabelle. Warum sollte man MAX() auf einer varchar-Spalte ausführen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X