Just nu i M3-nätverket
Gå till innehåll

index & sql server


banski

Rekommendera Poster

Hej,

 

Jag skulle behöva få mina dynamiska sql sökningar snabbare. Jag har fått för mig att man kan lösa detta genom att indexera tabellen som jag söker i. Men då jag inte är en SQL server expert skulle jag behöva få en hint om hur man gör detta på bästa sätt.

 

Antigen genom ett svar här eller någon länk till en sida som beskriver hur man löser det.

 

Den tabell/cell är av typen Text (40) som jag vill indexera.

 

Mvh

 

banski

 

[inlägget ändrat 2002-12-08 10:05:36 av banski]

Länk till kommentar
Dela på andra webbplatser

Hej!

 

En enkel grej när du skall skapa index är helt enkelt att kolla vilka fält som är med i villkoren. Du kan även använda t ex "Query Analyzer" om du kör MS SQL (Display Estimated Execution Plan). Ser nu, tyvärr att du verkar använda mySQL ;-).

 

Observera att dynamiskt uppbyggda sql är ingen höjdare eftersom sql måste kompilera om proceduren varje gång. Det går i princip alltid att göra en procedur som inte använder dynamiskt uppbyggda sql frågor även om man t ex behöver skicka in en array med värden.

 

Mvh

 

Jimmy

 

 

[inlägget ändrat 2002-12-08 20:35:28 av dotgif]

Länk till kommentar
Dela på andra webbplatser

Hej,

Tackar för svaret.

Jag använder mig av MS SQL 2000.

Jag får läsa in mig mer på Display Estimated Execution Plan funktionen.

 

Men på vilket sätt skulle man gå tillväga om man ska bygga upp en procedur som inte kräver lika mycket "kraft". Kanske kan ge mig en liten "hint" om detta =)

 

Sökningen tar idag c:a 2 sek.

 

/banski

 

Länk till kommentar
Dela på andra webbplatser

Nu vet jag inte om det är samma fält men du har frågat om detta tidigare så jag misstänker det.

 

(books LIKE '%history%')) 

 

Om ud har en fråga som ser ut så, så skall dun indexera kolumnen books, tyvärr hjälper det föga i exemplet ovan eftersom när man indexerar så lägger databasen upp ett register i "bokstavsordning" tänk telefonkatalogen. Om jag då söker på något som börjar på 'Ka%' så har jag nytta av mitt register eftersom jag då direkt kan gå till sida som har poster som börjar på 'Ka', typ 'Karlsson, 'Kallesson' osv osv..

 

Om jag istället söker på '%ka%' så kan jag inte det, utan måste gå igenom VARJE post och se om de innehåller bokstavskominationen 'ka'.

 

Nu ser det dock ut som att du använder hela ord, History. Alltså skulle jag skrivit om satsen till

 

(book = 'history')

 

Vilket dels går fortare än LIKE samt att du kan uttnytja indexen.

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Länk till kommentar
Dela på andra webbplatser

Tackar,

 

Då har jag lite humm om hur index fungerar.

 

Problemet är att man inte kan använda sig av (book = 'history') då det är ett text fält av typen TEXT(16) som skall sökas igenom. Vidare så kan den dynamiska strängen innehålla fler satser ex. (book LIKE '%history%') AND (book LIKE '%food%').

 

Hur kan man på något annatsätt snabba upp sökningarna?

 

Tacksam för fler tips

 

banski

 

 

 

Länk till kommentar
Dela på andra webbplatser

Är det ett beskrivnings fält som innehåller en massa beskrivnigsord, eller är det ett fält med en sammanhängande beskrivning.

 

Typ

 

book = "car,engine,wheel..."

 

eller

 

book = "this book tell you all about the car..."

 

För om det är det först så har du en felaktig databasdesign och det är det som stökar till det för dig! Är det det andra sättet så är det inte så mycket att göra mer än att fundera på att lägga upp en kolumn med beskrivand ord, som du tror man kommer att söka på.

 

- Magnus

-----------------------------------------------------

ju mer jag lär mig ju mer inser jag så lite jag kan

 

Länk till kommentar
Dela på andra webbplatser

Hej igen och tackar fö svaret.

 

Det är en atikeldatabas som jag skall söka igenom dvs artiklar. Det och texten är det jag vil söka på. Därav blir man väl tvugen att söka på (artikel LIKE '%food%'. "Den slöa medtoden". Dvs hittar alla artiklar med ordet food. Och man skall även kunna söka på AND OR NOT i olika kombinationer.

 

Tyvärr utvecklar jag emot en befintlig databas som man inte kan ändra på.

 

Tips på hur man kan få det snabbare?

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

MattiasCanberger

Kolla in full text index i BOL.

Vet inte hur pass bra det fungerar på en så pass smal kolumn (40) men det kan va värt att kolla.

Annars finns det egentligen inte mycket att göra. Det bästa du kan göra är att lägga index på de andra kolumnerna som ingår i frågan.

Ett index på den här specifika kolumnen gör ingen nytta.

 

/Mattias

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...