Jos haen tietokannasta esim kaikki viestit tietyltä palstalta:
"SELECT * FROM forum WHERE forumid=1"
Tämä hakee kaikki viestit, mutta sivulle mahtuu vain 20 viestiä.
Sivun alla on linkit seuraaville sivuille:
Sivu: [1] [2] [3] [4]
Joten jos haluan vain sivun 3 viestit haen siis:
"SELECT * FROM forum WHERE forumid=1 LIMIT 40, 20"
Mutta jotta voisin tehdä tuon linkkivalikon muille sivuille, minut pitäisi tietää montako viestiä on palstalla yhteensä.
Joten onko ainoa keino saada tämä tieto siis ensin hakea kaikki viestit, ja tämän jälkeen LIMIT:illa rajoitetun määrän?
Tämä on mielestäni aika tehotonta, joten onko muita vaihtoehtoja?
"SELECT * FROM forum WHERE forumid=1"
Tämä hakee kaikki viestit, mutta sivulle mahtuu vain 20 viestiä.
Sivun alla on linkit seuraaville sivuille:
Sivu: [1] [2] [3] [4]
Joten jos haluan vain sivun 3 viestit haen siis:
"SELECT * FROM forum WHERE forumid=1 LIMIT 40, 20"
Mutta jotta voisin tehdä tuon linkkivalikon muille sivuille, minut pitäisi tietää montako viestiä on palstalla yhteensä.
Joten onko ainoa keino saada tämä tieto siis ensin hakea kaikki viestit, ja tämän jälkeen LIMIT:illa rajoitetun määrän?
Tämä on mielestäni aika tehotonta, joten onko muita vaihtoehtoja?
Vastaukset 3
Vanhimmat
Ei missään nimessä kaikkia viestejä ellet niitä tartte. Teet ihan perinteisen count kyselyn.
SELECT COUNT(*) FROM forum WHERE forumid = 1
Ja mikäli kanta on oikein indeksoitu niin rivimäärän tieto löytyy suoraan indeksistä eikä tartte erikseen laskea, nopeaa ja tehokasta.
Varmaan tiedätkin, ettei tähtiä kannata käyttää muutakuin esimerkeissä, joten luettele sarakkeet.
>...tiedätkin, ettei tähtiä kannata käyttää...
Eikös Count(1) anna ihan saman tuloksen ja pienemmällä kuormalla ?
*Eikös Count(1) anna ihan saman tuloksen ja pienemmällä kuormalla ?*
Sanoin myös
*Ja mikäli kanta on oikein indeksoitu niin rivimäärän tieto löytyy suoraan indeksistä eikä tartte erikseen laskea, nopeaa ja tehokasta.*
Ellen ihan väärin muista niin * countissa antaa tuloksen sieltä mistä sen kannan optimoijan mukaan nopeiten saa. Eikä siis laske jokaista saraketta erikseen, niitähän on sama määrä.
Selectissä tähdellä on suurikin merkitys silloin liikutellaan useinmiten turhaa dataa. Tässä tapauksessa kannalta tulee vain rivimäärän tieto käytettiin sitten tähteä tai ei.
Tulipahan testattua yli kahdenmiljoonan rivin kannalla molemmat tavat yhtänopeita. 20000 kyselyn testi scripti menee läpi 5.3 - 5.4sek käytti kumpaa tahansa.