Onko järkevää ?

Kirjassa oli esimerkki, jos haluaa jakaa pitkä listan tietoa monelle sivulle, ja laittaa sivun alalaitaan linkit jokaiselle sivulle tyyliin:



Niin sitä varteen sama SQL query suoritetaan 2 kertaa, ensin lasketaan kaikki rivit, jotta tietäisimme montako sivua tulee, ja sen jälkeen suoritetaan sama query, muta LIMIT arvoilla, ja haetaan yhden sivun tiedot.

Joten onko tällainen järkevää, jos kysely, joka hakee nämä tiedot on aika raskas? Toisaalta voiko saman kyselyn suorittaminen kaksi kertaa peräkkäin olla hidasta, kun se todennäköisesti jää johonkin puskuriin?

Vai kannattaisiko kuitenkin laittaa sivuille vain linkit, ilman sivunumeroita, kun tätä varteen ei tarvita kahta kyselyä.
1151
Äänestä

Muut lukivat myös

Vastaukset 1

Vanhimmat

*Niin sitä varteen sama SQL query suoritetaan 2 kertaa, ensin lasketaan kaikki rivit, jotta tietäisimme montako sivua tulee, ja sen jälkeen suoritetaan sama query, muta LIMIT arvoilla, ja haetaan yhden sivun tiedot.*

Ei todellakaan noin. Liikutat taulusta kaikki datan ja ilmeisesti katsot mysql_num_rows avulla paljon rivejä palauttaa ja tämän jälkeen haet vain vaikkapa 30 viestiä.

Toki tuo toimii jos taulun koko pieni, mutta jos taulun koko kasvaa niin MySQL serverin ja PHP-tulkin välillä liikennettä tulee paljon jolloin sivusi hidastuu hidastumistaan. En tosin ole varma toimiiko MySQL hieman toisin, hakee kaikki datan ja sitten kertoo PHP:lle pelkän rivimäärän mysql_num_rows käytettäessä. Ihan sama melkein yhtähuono juttu.


Tee tämmöinen kysely joka on todella kevyt ja nopea todella suurilla tietomäärilläkin, pelkkä rivimäärä haetaan suoraan indeksist.

SELECT COUNT(*) FROM taulu LIMIT 1

ja sitten vaik
SELECT viesti,kirjoittaja FROM taulu LIMIT 0,30


*Toisaalta voiko saman kyselyn suorittaminen kaksi kertaa peräkkäin olla hidasta, kun se todennäköisesti jää johonkin puskuriin?*

Kyllä voi olla hidasta jos kysely tuo turhaa dataa tai on muutoin huonosti suunniteltu jne... Totta se että kyselyt yleensä tallenetaan tietokannan muistiin jolloin seuraava sama kysely on paljon nopeempa (riippuu tietokanta palvelimen asetuksist). Mutta kahta tai useampaakaan samaa kyselyä ei ole järkevää tehdä. Miksi hakea data uudestaan jos sinulla se jo on?


*Vai kannattaisiko kuitenkin laittaa sivuille vain linkit, ilman sivunumeroita, kun tätä varteen ei tarvita kahta kyselyä.*

Laita se kumpa sinua enempi miellyttää. Tosin suosittelen, että jos päädyt vain edellinen ja seuraava linkkeihin niin silti käytät kahta kyselyä. Ettei tule semmoista tilannetta, että olet esim ekalla sivulla ja silti voit klikata edellinen.

Turhaan huolestut kahdesta tietokanta kyselystä varsinkin kun on kevyitä ja pikkuruisia, eikä mitään monimutkasia liitoksia alikyselyineen. Esim perus foorumi softat tekee 3-8 kyselyä sivua kohti. Yleensä tietokanta yhteyden luominen kestää kauemmin kuin itse kyselyjen suorittaminen.

Tärkeintähän on, että sinulla on taulu indeksoitu ja suunniteltu kunnolla sekä kyselyt on kunnollisia. Sekä yleissääntönä hae vain se data mitä tarttet etkä yhtään enempää.

Äänestä

Kommentoi aloitusta


tällainen.. kirjoitti:

Kirjassa oli esimerkki, jos haluaa jakaa pitkä listan tietoa monelle sivulle, ja laittaa sivun alalaitaan linkit jokaiselle sivulle tyyliin:



Niin sitä varteen sama SQL query suoritetaan 2 kertaa, ensin lasketaan kaikki rivit, jotta tietäisimme montako sivua tulee, ja sen jälkeen suoritetaan sama query, muta LIMIT arvoilla, ja haetaan yhden sivun tiedot.

Joten onko tällainen järkevää, jos kysely, joka hakee nämä tiedot on aika raskas? Toisaalta voiko saman kyselyn suorittaminen kaksi kertaa peräkkäin olla hidasta, kun se todennäköisesti jää johonkin puskuriin?

Vai kannattaisiko kuitenkin laittaa sivuille vain linkit, ilman sivunumeroita, kun tätä varteen ei tarvita kahta kyselyä.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu