Tarkoituksena olisi tehdä yhdyssanatietokanta
yhdessä taulussa olisivat kaikki sanat, esim:
(id) (varchar)
1 talo
2 kesä
3 auto
4 poika
6 kirja
7 pöytä
jne..
ja toisessa sanaparinindeksit, joksikin näin:
(id)(id_aku)(id_loppu)
1 1 6 #talokirja
2 2 3 #kesäauto
3 7 6 #pöytäkirja
jne..
Jos oletamme että sanoja on tosipaljon (500/700 tuhatta) ja yhdistelmiä vielä enemmän. Niin jos pitäisi hakea esim kaikki "ta*" alkuiset sanat, niin hausta tulisi aika raskas, eikö niin? Ensin pitäisi yhdistää taulu1 ja taulu2, ja sitten etsiä sanojen loppuosat taulu1:sta. Eikö niin?
Onko tähän tarkoitukseen olemassa joku parempi ratkaisu, kun pitää hakea sanat ensimmäisen sanan tai sen alkuosan perusteella ja hakuja suoritetaan tosi paljon.
Optimaalinen ratkaisu
1
215
Vastaukset
- Jokunen
*Niin jos pitäisi hakea esim kaikki "ta*" alkuiset sanat, niin hausta tulisi aika raskas, eikö niin?*
Mikäli oikein olen ymmärtänyt niin osittaisen tekstin haku on raskas, tosin tuossa tapauksessa pystyy käyttää indeksiä varsin tehokkaasti joten ei se hirvittävän raskas ole.
*Ensin pitäisi yhdistää taulu1 ja taulu2, ja sitten etsiä sanojen loppuosat taulu1:sta. Eikö niin?*
Ei. Jos tarkoitat tuota ta* juttua, niin tietokanta hakee ensis kaik mitkä täsmää ehtoon ta* sen jälkeen vasta suorittaa tuon liitoksen.
Et kertonu tietokantaa, mutta yleisesti voidaan sanoa, että ei varchar vaan ennemmin char jos halutaan tehokkas ratkaisu. Haittana on tilantarpeen kasvu. Varchar tyyppisis joudutaan katsomaan pituus joka on hidasta kiinteä mittaseen verrattuna.
Ja mikäli tuo on liian hidas niin voit harkita denormalisointia.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
- 73893
Miltä se tuntuu
Miltä se tuntuu havahtua, että on ollut ihmistä kohtaan, joka on rakastanut ja varjellut, täysi m*lkku? Vai havahtuuko s104768- 54713
- 41684
- 49644
- 44640
- 31629
Mitä se olisi
Jos sinä mies saisit sanoa kaivatullesi mitä vain juuri nyt. Ilman mitään seuraamuksia yms. Niin mitä sanoisit?34577- 50570
- 38516