Ik heb een SQL Server 2000 database met een tabel met >1.000.000 records. Deze tabel heeft een kolom "naam varchar(100)". Ik wil in deze kolom zoeken met 2 wildcards, en wel als volgt "%zoekterm%".
Nu heeft dat een vrij lang lopende query tot gevolg, +/- 8 seconden. Draai ik de query 3 keer achter elkaar dan lopen de tijden terug van 8 naar 4 naar 1 (allemaal +/-). Wacht ik na de derde keer 30 seconden en voer ik de query nog eens uit dan duurt het weer vrolijk 8 seconden.
Een index aanmaken op de kolom heeft alleen zin als je zoekt zonder start %, dus die oplossing valt af.
Een Full-Text index valt ook af, want ik wil op delen van woorden kunnen zoeken. Met Full-text kun je zoeken op "woord*" en dan "woordenboek" vinden, maar niet zoeken op "*boek" en dan "woordenboek" vinden. Wel vind je dan "ik heb een boek", omdat boek dan een los woord is in die zin.
Deze 2 standaard oplossingen, die ik al in meerdere topics hier op GoT terug gevonden heb kan ik dus niet inzetten. Nu vraag ik me af of er uberhaupt een manier is om zoekopdracht met dubbele wildcards snel uit te voeren?
Ik vermoed dat dit wel wil, maar dan met een gigantische dubbele administratie, waarin woorddelen oid opgeslagen worden, of per voorkomende letter in welke records deze allemaal voorkomt. Beide manieren om via een zooi metagegevens sneller het aantal records te beperken. Met meer dan 1.000.000 records kan dat wel eens een gigantische hoeveelheid extra MB's aan data opleveren.
Wat ik me daarnaast afvraag is waarom de query tijden van queries die vlak achter elkaar uitgevoerd worden zo laag liggen? Is dat een soort van tijdelijke cache oid? En is die cache in te stellen zodat die zoekresultaten langer beschikbaar blijven? Of vreet dat het interne geheugen van de server helemaal leeg? (SQL Server is al zo'n geheugen verslinder)
Ik ben zelf ook nog op zoek naar/aan het nadenken over alternatieve manieren van zoeken, maar tips zijn van harte welkom. Of is zoeken op een deel van een woord onmogelijk snel te doen?
Nu heeft dat een vrij lang lopende query tot gevolg, +/- 8 seconden. Draai ik de query 3 keer achter elkaar dan lopen de tijden terug van 8 naar 4 naar 1 (allemaal +/-). Wacht ik na de derde keer 30 seconden en voer ik de query nog eens uit dan duurt het weer vrolijk 8 seconden.
Een index aanmaken op de kolom heeft alleen zin als je zoekt zonder start %, dus die oplossing valt af.
Een Full-Text index valt ook af, want ik wil op delen van woorden kunnen zoeken. Met Full-text kun je zoeken op "woord*" en dan "woordenboek" vinden, maar niet zoeken op "*boek" en dan "woordenboek" vinden. Wel vind je dan "ik heb een boek", omdat boek dan een los woord is in die zin.
Deze 2 standaard oplossingen, die ik al in meerdere topics hier op GoT terug gevonden heb kan ik dus niet inzetten. Nu vraag ik me af of er uberhaupt een manier is om zoekopdracht met dubbele wildcards snel uit te voeren?
Ik vermoed dat dit wel wil, maar dan met een gigantische dubbele administratie, waarin woorddelen oid opgeslagen worden, of per voorkomende letter in welke records deze allemaal voorkomt. Beide manieren om via een zooi metagegevens sneller het aantal records te beperken. Met meer dan 1.000.000 records kan dat wel eens een gigantische hoeveelheid extra MB's aan data opleveren.
Wat ik me daarnaast afvraag is waarom de query tijden van queries die vlak achter elkaar uitgevoerd worden zo laag liggen? Is dat een soort van tijdelijke cache oid? En is die cache in te stellen zodat die zoekresultaten langer beschikbaar blijven? Of vreet dat het interne geheugen van de server helemaal leeg? (SQL Server is al zo'n geheugen verslinder)
Ik ben zelf ook nog op zoek naar/aan het nadenken over alternatieve manieren van zoeken, maar tips zijn van harte welkom. Of is zoeken op een deel van een woord onmogelijk snel te doen?
[ Voor 3% gewijzigd door zneek op 25-05-2004 17:39 ]