Suche Indizierungsvorschlag

Suche Indizierungsvorschlag

am 08.03.2006 17:51:04 von stefan.glaesser

Hallo,

mal angenommen, ich habe eine Tabelle mit 10 Spalten und über 9 Spalten
liegt ein Volltext-Index.

CREATE TABLE `shopProducts` (
`id` varchar(16) NOT NULL,
`field1` text NOT NULL,
`field2` varchar(255) NOT NULL,
`field3` varchar(255) NOT NULL,
`field4` text NOT NULL,
`field5` text NOT NULL,
`field6` text NOT NULL,
`field7` varchar(255) NOT NULL,
`field8` varchar(255) NOT NULL,
`field9` varchar(255) NOT NULL,
FULLTEXT KEY `idx_fulltext_search`
(`field1`,`field2`,`field3`,`field4`,`field5`,
`field6`,`field7`,`field8`,`field9`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Dann kann ich wunderbar im Volltextindex dieser 9 Spalten suchen.
Allerdings brauche ich auch die Möglichkeit, lediglich bzw. verknüpft im
Volltextindex von (field1) oder (field2+3+4) oder (field5) oder (field6)
oder (field7+8+9) zu suchen.

Demnach könnte ich für die Felder entsprechende Volltextindizes anlegen.

Create Index FULLTEXT `idx_field1` (`field1`);
Create Index FULLTEXT `idx_field234` (`field2`,`field3`,`field4`);
usw.

Gibt es dafür eine elegantere Lösung? So bräuchte es neben sehr viel
Platz auch sehr viel Zeit beim Hinzufügen/Updaten von Datensätzen
aufgrund der vielen Indizes.


Gruß,
Stefan

Re: Suche Indizierungsvorschlag

am 08.03.2006 19:08:01 von Dirk Brosowski

Stefan Gläßer schrieb:
> Hallo,
>
> mal angenommen, ich habe eine Tabelle mit 10 Spalten und über 9 Spalten
> liegt ein Volltext-Index.
>
> CREATE TABLE `shopProducts` (
> `id` varchar(16) NOT NULL,
> `field1` text NOT NULL,
> `field2` varchar(255) NOT NULL,
> `field3` varchar(255) NOT NULL,
> `field4` text NOT NULL,
> `field5` text NOT NULL,
> `field6` text NOT NULL,
> `field7` varchar(255) NOT NULL,
> `field8` varchar(255) NOT NULL,
> `field9` varchar(255) NOT NULL,
> FULLTEXT KEY `idx_fulltext_search`
> (`field1`,`field2`,`field3`,`field4`,`field5`,
> `field6`,`field7`,`field8`,`field9`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
>
> Dann kann ich wunderbar im Volltextindex dieser 9 Spalten suchen.
> Allerdings brauche ich auch die Möglichkeit, lediglich bzw. verknüpft im
> Volltextindex von (field1) oder (field2+3+4) oder (field5) oder (field6)
> oder (field7+8+9) zu suchen.
>
> Demnach könnte ich für die Felder entsprechende Volltextindizes anlegen.
>
> Create Index FULLTEXT `idx_field1` (`field1`);
> Create Index FULLTEXT `idx_field234` (`field2`,`field3`,`field4`);
> usw.
>
> Gibt es dafür eine elegantere Lösung? So bräuchte es neben sehr viel
> Platz auch sehr viel Zeit beim Hinzufügen/Updaten von Datensätzen
> aufgrund der vielen Indizes.

Ich sehe direkt keine andere Lösung, allerdings würde mich dieses Design
interessieren. Evtl. gibt es da Verbesserungsvorschläge, weil
durchnummerierte Felder sehen immer .. ähm .. seltsam aus. Evtl. macht
da eine weitere angehangene Tabelle Sinn.

Grüße

Dirk

Re: Suche Indizierungsvorschlag

am 08.03.2006 19:20:48 von stefan.glaesser

Hallo Dirk,

> Ich sehe direkt keine andere Lösung, allerdings würde mich dieses Design
> interessieren. Evtl. gibt es da Verbesserungsvorschläge, weil
> durchnummerierte Felder sehen immer .. ähm .. seltsam aus. Evtl. macht
> da eine weitere angehangene Tabelle Sinn.

Schade. Da bin ich mal auf die Insert/Update-Dauer gespannt, die sich
mit noch mehr Indizes sicher verlängert. Das Design der Tabelle ist
soweit in Ordnung. Es handelt sich schlicht um Bücher, die Felder sind
Titel, Autor usw.

Auf den großen Fulltext-Index zu verzichten und bei einer
"Volltextabfrage" eine Verknüpfung der Bedingungen zu nehmen, ist sicher
auch keine gescheite Lösung, oder?

Select ... from shopProducts
WHERE MATCH (field1) against (suchworte...)
OR MATCH (field2, field3, field4) against (suchworte...)
OR MATCH usw...

??


Gruß,
Stefan