elcomportal
Neuer Benutzer
- Beiträge
- 4
Hallo,
ich habe ein paar Tabellen. Nehmen wir uns mal die gößte Tabelle vor.
Hier die Struktur:
Ich hatte schon auf verschiedenste Arten Indexe erstellt, auch Index über mehrere Spalten, aber es hat nichts gebracht.
Hier erstmal die Query:
Wobei die Eingrenzung nach Marke nur optional ist, genau wie die Volltext-Suche ...and Match...
Die 3 ORDER BY sind die 3 Varianten, die zur Zeit ausgewählt werden können.
Nun ist es so, daß die Abfrage mehr als 10 Sekunden dauert und das ist nicht befriedigend. Wie bereits erwähnt, habe ich schon verschiedene Arten der indexe probiert, aber es wird nicht schneller, oftmals benutzt MySQL den Index gar nicht (EXPLAIN ...).
Wie sollte ich den Index am Besten anlegen, so daß er benutzt wird und die Abfragen schneller werden. Die Where-Klausel kat IN('1'... kann auch schon mal 30 oder 40 Werte beinhalten, diese Werte kommen aus einem vom PHP-Script erstellten Array.
Was ich noch erwähnen sollte, die Daten werden per LOAD DATA INFILE in die Tabelle geschrieben, vorher werden alle Produkte des Anbieters gelöscht und dann werden die Daten in die Tabelle geschrieben. Das passiert jede Nacht.
Ich hoffe ihr könnt mir helfen.
Vielen Dank schonmal im Vorraus.
VG
Torsten
ich habe ein paar Tabellen. Nehmen wir uns mal die gößte Tabelle vor.
Hier die Struktur:
Code:
CREATE TABLE `artikel_Mode` (
`product_id` bigint(20) NOT NULL AUTO_INCREMENT,
`anbieter` varchar(64) NOT NULL,
`ueberschrift` varchar(260) NOT NULL,
`beschreibung` varchar(4512) NOT NULL,
`bildlink` varchar(255) NOT NULL,
`shoplink` varchar(512) NOT NULL,
`preis` float NOT NULL,
`marke` varchar(255) NOT NULL,
`kat` varchar(12) NOT NULL,
`lieferkosten` double NOT NULL,
`lieferzeit` varchar(56) NOT NULL,
`extra1` varchar(2000) NOT NULL,
`extra2` varchar(2000) NOT NULL,
`zupid` varchar(128) NOT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14359062 ;
Ich hatte schon auf verschiedenste Arten Indexe erstellt, auch Index über mehrere Spalten, aber es hat nichts gebracht.
Hier erstmal die Query:
Code:
SELECT SQL_CALC_FOUND_ROWS ueberschrift, SUBSTRING(beschreibung,1,250),
bildlink,shoplink,preis,marke,anbieter,lieferkosten,lieferzeit,extra1,extra2,zupid,
kat FROM artikel_Mode WHERE kat IN ('1','3','100','132')
AND marke='der Hersteller'
AND MATCH (ueberschrift,beschreibung) AGAINST ('suchtext' IN BOOLEAN MODE)
ORDER BY ueberschrift ASC LIMIT 1,24
ORDER BY preis ASC LIMIT 1,24
ORDER BY preis DESC LIMIT 1,24
Die 3 ORDER BY sind die 3 Varianten, die zur Zeit ausgewählt werden können.
Nun ist es so, daß die Abfrage mehr als 10 Sekunden dauert und das ist nicht befriedigend. Wie bereits erwähnt, habe ich schon verschiedene Arten der indexe probiert, aber es wird nicht schneller, oftmals benutzt MySQL den Index gar nicht (EXPLAIN ...).
Wie sollte ich den Index am Besten anlegen, so daß er benutzt wird und die Abfragen schneller werden. Die Where-Klausel kat IN('1'... kann auch schon mal 30 oder 40 Werte beinhalten, diese Werte kommen aus einem vom PHP-Script erstellten Array.
Was ich noch erwähnen sollte, die Daten werden per LOAD DATA INFILE in die Tabelle geschrieben, vorher werden alle Produkte des Anbieters gelöscht und dann werden die Daten in die Tabelle geschrieben. Das passiert jede Nacht.
Ich hoffe ihr könnt mir helfen.
Vielen Dank schonmal im Vorraus.
VG
Torsten