index mit LIKE '%xxxx%'
Struppi
- datenbank
Ich befürchte ich entwickel mir gerade einen Performancekiller, deshalb wollte ich die Meinung der DB Spezialisten hier mal hören bevor ich anfange.
also ich habe ein mySQL DB mit ca. 10,000 einträge, ein Index ist ein varchar, der einen von fünf verschiedene Strings beinhalten kann. Bisher alles keine Problem ein SELECT * FROM tbl WHERE index LIKE 'xxxx' (plus LIMIT) erfüllt den Zweck.
Nun wäre es aber evtl. nett, wenn die Indexspalte mehere Werte enthalten könnte. Mein Überlegung war diese werte mit Komma oder Leerzeichen zu separieren und dann mit LIKE '%xxx%' abzufragen.
Also in etwa so:
SPALTE_1 SPALTE_2 INDEX
.... .... xxx, yyy
.... .... xxx
.... .... yyy
.... .... zzz, yyy
.... .... zzz, yyy, xxx
.... .... zzz
Um dann mit:
SELECT * FROM tbl WHERE index LIKE '%xxx%'
oder
SELECT * FROM tbl WHERE index LIKE '%yyy%'
zu zugreifen.
Ist die Suche mit '%' auf 10,000 Datensätze (LIMIT sind max. 100) noch vertretbar?
Oder gibt es bessere Wege?
Struppi.
Hi,
Ich befürchte ich entwickel mir gerade einen Performancekiller,
absolut zu Recht. Eine Seite des Suchbegriffes sollte immer ohne "%" enden, und von dieser Seite aus sollte die Spalte indiziert sein.
also ich habe ein mySQL DB
MySQL verfügt über Volltext-Indexe. Nutze diese Fähigkeit.
Cheatah
yo,
SELECT * FROM tbl WHERE index LIKE '%xxx%'
SELECT * FROM tbl WHERE index LIKE '%yyy%'
ein index wird generell über alle werte eine spalte erzeugt. solange du nur eine spalte abfragst, brauchst du nicht einen weiteren index. allerdings wird bei deinem konstrukt von LIKE '%xxx%' kein index benutzt werden, auch wenn er vorhanden ist. das liegt an dem führenden %, am ende ist ein % nicht so dramatisch.
aber wie chetah dich schon hingewiesen hat, gibt es die möglichkeit der volltext suche.
Ilja
hi,
also ich habe ein mySQL DB mit ca. 10,000 einträge, ein Index ist ein varchar, der einen von fünf verschiedene Strings beinhalten kann.
warum ein VARCHAR, und kein SET?
gruß,
wahsaga
also ich habe ein mySQL DB mit ca. 10,000 einträge, ein Index ist ein varchar, der einen von fünf verschiedene Strings beinhalten kann.
warum ein VARCHAR, und kein SET?
Wäre auch eine Option.
Es ist halt bisher so, weil es sich so entwickelt hatte.
Struppi.