SQL lekérdezések sebességoptimalizálása
2010-10-04T15:14:26+02:00
2010-10-05T14:37:15+02:00
2022-07-19T04:27:27+02:00
  • Értem már én is.
    Nem is értem, hogy követhettem el ekkora hibát...?
    Mutasd a teljes hozzászólást!
  • Mert a függvény meghívása előtt kell csinálnom egy tömböt:


    $UD = array(1, 'name', 'email');


    Ha azt akarnám, hogy az 'id' legyen az id, és ne a 0. elem, akkor így kellene csinálnom:


    $UD = array("id" => 1, 'name', 'email');


    Pusztán ennyi az oka, egyszerű kényelem. Csak annyit kell megjegyezni, hogy a bemenő array-ben a 0. key kell, hogy legyen az id.

    Egyébként a visszatérési array tegnap óta változott annyival, hogy

    unset($UserDataArray[0]);
    - kinyírjuk a 0. elemet, ami ugye az id,
    $usrResultArray["userid"] = $usrUserID;
    - userid kulcshoz rendeljük az "userid" értékét, így az adatok kinyerésénél nem a 0. indexre, hanem az "userid" kulcsra hivatkozunk.

    Tudom, ez így se nem logikus, se nem következetes, de nekem így szimpi :))
    Mutasd a teljes hozzászólást!
  • Ez már majdnem jó, de miért nem lehet nem a 0. index az id, hanem az 'id' nevü index az id..
    Mutasd a teljes hozzászólást!
  • Egy rekordnál nem kérdéses, hogy az egyben történő lekérdezés a gyorsabb (különösen ha nagy rekord számú a tábla és esetleg még index sincs rá). De ha egy táblázatot raknál össze (nem html, hanem mondjuk csv fájlban), akkor felesleges a nem megjelenített mezők lekérése. Persze ezzel bíbelődni is csak megfelelő nagy számú mező felett érdemes. Néhány soros táblák lekérésénél nem igazán számít, hogy most néhány mezővel többet kérsz le.
    Mutasd a teljes hozzászólást!
  • Világos.
    Lehet, hogy később én is ehhez a módszerhez folyamodom, de most általánosabb megoldást keresek.

    Megalkottam egy függvényt, ami egy tömböt vár, és szintén egy tömböt ad vissza.
    A tömb 0. indexe a userid, mégpedig annak a usernek az id-je, akinek az adatait le szeretnénk kérdezni, valamint további indexekben a lekérdezendő adatok.

    Pl., az admin (useridje: 2) nevének, email címének és IP címének lekérdezése:
    Ez megy be: Array ( [0] => 2 [1] => name [2] => email [3] => userip )
    Ez jön ki: Array ( [0] => 2 [name] => Administrator [email] => admin@admin.net [userip] => 127.0.0.1 )

    Így most már egy lekérdezésből megvan akár az összes adat.
    Mutasd a teljes hozzászólást!
  • Én két csoportra osztanám az adatokat. Az egyik kell nagyon sok helyen (id, név, login, e-mail, kép) a másik meg szinte csak az adatlapon (leírás magamról, skype vagy msn elérés, stb). Ez két lekérdezés (utóbbiba érdemes beletenni a gyakran használtkat is).

    Egy lekérdezés sebessége általában nem függ jelentősen a lekérdezett mezők számától, azok méretétől (sokkal lasabb dolog a kapcsolatot felépíteni, az indexben - vagy pláne a nélkül - keresni). Persze ez így nem igaz, hisz:
    - nagyon sok rekord esetében már lehet jelentősége az egyes rekordok méretének és elképzelhető, hogy a keresés kevesebb ideig tart, mint az adatok kiolvasása és áttolása a hálózaton
    - blob vagy text mezők esetén jelentősen lassul az adatok elérése.
    Mutasd a teljes hozzászólást!
  • És akkor is, ha egy lekérdezésben - teszem azt - 20 mezőt kapok eredményül? Az is gyorsabb, mint ha 20 lekérdezést indítok, mind a 20 lekérdezéstől 1 mezőt kapok?
    Végülis, biztosan, ja.
    Mutasd a teljes hozzászólást!
  • 1 lekérdezés gyorsabb, mint 5
    Mutasd a teljes hozzászólást!
  • Remélem érthető a kérdés...
    Mutasd a teljes hozzászólást!
  • Hello,

    van egy MySQL adatbázisom néhány táblával.
    Az egyik tábla felhasználók adatait tartalmazza, mint pl. userid, name, email, password, lastlogin, description, anyámkínnya.... ezt a táblát hívják 'users'-nek.
    Sok esetben kell lekérnem adott user egy-egy adatát, sok esetben viszont több, vagy épp az összes adatát.

    Eddig úgy csináltam, hogy (pszeudókód):

    [b]string[/b] GetUserNameByID($userid); [b]string[/b] GetUserEmailByID($userid); [b]datetime[/b] GetUserLastLoginByID($userid); stb.

    Ez esetben a függvény SQL lekérdezése így fest (pszeudókód):
    [b]string[/b] GetUserNameByID($userid) { SQLQuery = "SELECT name FROM users WHERE userid = $userid"; return SQLQuery; }; [b]string[/b] GetUserEmailByID($userid) { SQLQuery = "SELECT email FROM users WHERE userid = $userid"; return SQLQuery; };
    És ennek mintájára a többi lekérdezés...

    Namármost, ezen esetekben, ha mondjuk az user minden adatára szükségem van, akkor le kell futtatnom egy rakat függvényt, amikben van egy rakat lekérdezés.

    De ha úgy csinálnám, hogy (pszeudókód):
    [b]array[/b] GetUserDateByID($userid, $name, [$email, ...]) { SQLQuery = "SELECT name, [email, ...] FROM users WHERE userid = $userid"; };
    Akkor csak egyetlen lekérdezést kellene lefuttatnom, a végeredmény tömbben érkezne, amiből ki tudnám szedegetni az adatokat.

    Kérdés: melyik módszer gyorsabb, erőforráshatékonyabb, gazdaságosabb?
    Mutasd a teljes hozzászólást!
abcd