Kom ihåg mig?
Home Menu

Menu


Sökteknik SQL

 
Ämnesverktyg Visningsalternativ
Oläst 2006-06-30, 16:51 #1
Conths avatar
Conth Conth är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Aug 2005
Inlägg: 908
Conth Conth är inte uppkopplad
Mycket flitig postare
Conths avatar
 
Reg.datum: Aug 2005
Inlägg: 908
Någon som har ett bra tips om hur man effektivast söker i en tabell med många rader.

Jag har en tabell med t.ex. kolumner för; kön, födelsedatum, bostadsort och civilstatus.

Så vill jag att mina användare skall kunna välja sökbegrepp fritt. T.ex;
- Alla singeltjejer födda mellan 1970-1974
- Alla som är födda 1988 och bor i Göteborg
- etc etc

Mitt problem idag är att det blir seeega sökningar, eftersom jag inte kan(?!) ha index som täcker alla kombinationer.
Nu har jag det för de vanligaste sökningarna men inte för alla. Eftersom det är många rader blir sökningarna kraftödande...

Någon som har någon smart lösning på problematiken??
Conth är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-30, 17:14 #2
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
En sak som kan vara värt att testa är att göra en sökning för varje sökvillkor och sen slå ihop dem. Börja med den som ger minst träffar.

Alla födda mellan 1970 - 1974. Du får en array av ID.
Alla singlar som finns i arrayn. ( SELECT ID FROM members WHERE status = "singel" AND ID IN(alla id från första sökningen) ). Du får en ny array av ID.
Alla tjejer som finns i arrayn.

Eftersom varje sökning nu kan använda index om du sätter ett index på varje kolumn kan det gå fortare. Jag har använt det för en liknande sak och det gick betydligt mycket fortare.
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-30, 19:14 #3
MRDJs avatar
MRDJ MRDJ är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Mar 2006
Inlägg: 1 667
MRDJ MRDJ är inte uppkopplad
Bara ett inlägg till!
MRDJs avatar
 
Reg.datum: Mar 2006
Inlägg: 1 667
Citat:
Originally posted by Conth@Jun 30 2006, 15:51
Någon som har ett bra tips om hur man effektivast söker i en tabell med många rader.

Jag har en tabell med t.ex. kolumner för; kön, födelsedatum, bostadsort och civilstatus.

Så vill jag att mina användare skall kunna välja sökbegrepp fritt. T.ex;
- Alla singeltjejer födda mellan 1970-1974
- Alla som är födda 1988 och bor i Göteborg
- etc etc

Mitt problem idag är att det blir seeega sökningar, eftersom jag inte kan(?!) ha index som täcker alla kombinationer.
Nu har jag det för de vanligaste sökningarna men inte för alla. Eftersom det är många rader blir sökningarna kraftödande...

Någon som har någon smart lösning på problematiken??
det går att bygga upp en sqlfråga beroende på vad användaren har valt att söka på.

sen alltid när det gäller databaser så är INDEXERING skit viktigt.
det blir sån jääkla skillnad när du byggt ett bra index.

bygg ditt index beroende på vad du har i where:satsen.


lite svårt att säga hur du skall bygga sqlfrågan när man inte vet hur strukturen ser ut

men som sagt.. index =)
MRDJ är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-30, 20:52 #4
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
fredlund: Läste du ens Conth post? Han skriver:
"Mitt problem idag är att det blir seeega sökningar, eftersom jag inte kan(?!) ha index som täcker alla kombinationer.
Nu har jag det för de vanligaste sökningarna men inte för alla. Eftersom det är många rader blir sökningarna kraftödande..."
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-30, 21:13 #5
MRDJs avatar
MRDJ MRDJ är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Mar 2006
Inlägg: 1 667
MRDJ MRDJ är inte uppkopplad
Bara ett inlägg till!
MRDJs avatar
 
Reg.datum: Mar 2006
Inlägg: 1 667
Citat:
Originally posted by WizKid@Jun 30 2006, 19:52
fredlund: Läste du ens Conth post? Han skriver:
"Mitt problem idag är att det blir seeega sökningar, eftersom jag inte kan(?!) ha index som täcker alla kombinationer.
Nu har jag det för de vanligaste sökningarna men inte för alla. Eftersom det är många rader blir sökningarna kraftödande..."
oj, läste en aning fel.. hehe sorry
MRDJ är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-30, 21:20 #6
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
Du skulle kunna bryta ut vanliga kombinationer till en egen tabell. Självklart blir det data som du ändå kunde lagrat i samma tabell som personinformationen, dvs risken blir att det blir redundant. Men är det data som uppdateras sällan är det bättre för sökprestanda att lägga det i egna tabeller eftersom sökning kanske sker oftare än uppdatering. Är det tvärtom, dvs uppdatering sker oftare än sökning bör du försöka slå ihop tabeller.

Men exempelvis skulle du kunna ha en tabell som lagrar id:n för vilka som är singlar. Då kan du köra en EXISTS.

Jag är ingen db-guru, men jag skulle iaf fundera i de banorna istället för att ha en bool i en tabell för singel eller ej.

Själv är jag en superfan av kopplingstabeller. (Och sen är EXISTS ett jättebra nyckelord istället för WHERE kolumn IN (...))
digiArt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-01, 00:00 #7
Conths avatar
Conth Conth är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Aug 2005
Inlägg: 908
Conth Conth är inte uppkopplad
Mycket flitig postare
Conths avatar
 
Reg.datum: Aug 2005
Inlägg: 908
Tack för förslagen, jag får prova mig fram lite.

Jag har byggt en strippad söktabell idag med de vanliga sökvärdena i, problemet är ju att det är relativt mycket uppdateringar och det gör att jag får tyngre för varje nytt index jag lägger på...
Conth är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-01, 08:58 #8
Blackexs avatar
Blackex Blackex är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 238
Blackex Blackex är inte uppkopplad
Medlem
Blackexs avatar
 
Reg.datum: Jun 2006
Inlägg: 238
Citat:
Originally posted by Conth@Jun 30 2006, 15:51
Mitt problem idag är att det blir seeega sökningar, eftersom jag inte kan(?!) ha index som täcker alla kombinationer.
Nu har jag det för de vanligaste sökningarna men inte för alla. Eftersom det är många rader blir sökningarna kraftödande...
Varför kan du inte sätta index på alla kolumner?

I mina öron låter det som att du har ett normaliseringsproblem..
dev.mysql.com/tech-resources/articles/intro-to-normalization.html
Blackex är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-01, 12:54 #9
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Originally posted by Conth@Jun 30 2006, 23:00
Tack för förslagen, jag får prova mig fram lite.
Jag har byggt en strippad söktabell idag med de vanliga sökvärdena i, problemet är ju att det är relativt mycket uppdateringar och det gör att jag får tyngre för varje nytt index jag lägger på...

Tala gärna om vad som fungerar bäst ifall du hittar någon bra lösning, kommer själv råka ut för samma sak framöver...
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-01, 16:02 #10
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Jag förutsätter att du använder en av de vanligare SQL-databserna.

Det låter som det bara handlar om svenska personer. Eftersom det bara bor 10 miljoner pers i Sverige kan det inte vara problem med de där sökningarna. Släng på ett standardindex på alla kolumnerna, läs manualen till din databasmotor för index och se om du inte kan slänga in mer specifika index (booleska tänker jag på i första hand) när du tagit reda på vad de är vanligt att söka på. Så länge tabellen inte uppdateras mycket kan du köra massor av index men förmodligen räcker det med få väl utvalda istället.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 22:59.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017