Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Zrychlení načítání dat z MYSQL (PHP)

Dobrý den chtěl jsem se zeptat mám v SQL (pro databázi MYSQL) dotaz uvedený níže, nicméně při dotazování do DB , trvá strašně dlouho než vyběhne výsledek, konkrétně stránka se načítá 1.05-1.09 s (jen soubor index.php).Což se mi zdá strašně moc, je zde nějaká možnost jak zvýšit rychlost načítání stránky ? Dá se tento kód nějak optimalizovat ? Indexy používám.

Děkuji za odpovědi.

"SELECT `is_users`.ID,Nickname,Email,Birthday,Joined,Donate,Last_online,Ranks,From_date,To_date,Reason,Miss_time,cw_description,cw_map,cw_datetime,Rights 
FROM `is_users` 
JOIN `is_rights` 
JOIN `is_ranks` 
JOIN `is_miss` 
JOIN `is_cw` 
ON (is_users.ID_rights = is_rights.ID AND
is_users.ID_ranks = is_ranks.ID AND
is_users.ID_miss = is_miss.ID AND
is_users.ID_CW = is_cw.ID) 
WHERE `is_users`.Nickname = '$uzivatel_jmeno'";
Předmět Autor Datum
napriklad pridanim indexov na polia tabulky, ktore sa pouzivaju pri joinovani a nie su to primarne k…
wam_Spider007 25.09.2012 20:51
wam_Spider007
Každá tabulka má svůj sloupec ID podle kterého je to propojené a tyto sloupce jsou primární klíče.
Vasekdvor 25.09.2012 20:59
Vasekdvor
cize polia id_ranks, id_rights, id_miss, .. v tabulke is_users su tiez primarne kluce? ja tipujem, z…
wam_Spider007 25.09.2012 21:02
wam_Spider007
Zatím právě že skoro žádnej objem dat nemá,is_users má jeden řádek a ostatní taktéž.Zatím to jen tes…
Vasekdvor 25.09.2012 21:14
Vasekdvor
indexy standardne. unique ked tak na pole nickname pokial plati, ze v nom su len jednoznacne hodnoty…
wam_Spider007 25.09.2012 21:16
wam_Spider007
Měl jste pravdu problém bude asi v PHP protože PhpMyAdmin naspal : Zobrazeny záznamy ( 1 celkem, dot…
Vasekdvor 25.09.2012 21:25
Vasekdvor
Tak problém je při volání této funkce, to trvá tak dlouho těch 1.04 sec: Nevíte co s tím ? functio…
Vasekdvor 25.09.2012 21:43
Vasekdvor
před $index_uzivatel = ziskat_udaje_clen_vse("Vasekdvor"); si dej něco ve stylu $pred = mktime(tru…
tomas.kulhanek 25.09.2012 22:29
tomas.kulhanek
vypsalo to jedničku 1 ($pred = mktime(true); $index_uzivatel = ziskat_udaje_clen_vse("Vasekdvor");…
Vasekdvor 25.09.2012 22:40
Vasekdvor
Tak ještě podobnou věc udělej při includování connect a disconnect. Tipuju, že bude problém tam.
Wikan 26.09.2012 06:33
Wikan
u connect to vypsalo taky 1, u disconnect 0, takže problém je prý u connect. Ale connect používám fu…
Vasekdvor 26.09.2012 11:36
Vasekdvor
OMG no já se snad pos*** , taková prkotina. Windows 7 má problém se zjišťováním "localhost" pro IPv6… poslední
Vasekdvor 26.09.2012 13:20
Vasekdvor

napriklad pridanim indexov na polia tabulky, ktore sa pouzivaju pri joinovani a nie su to primarne kluce?
A pokial je nickname nieco ako login, tak nan dokonca by mohol byt unique index

create index IX_USERS_1 on is_users (ID_rights);
create index IX_USERS_2 on is_users (ID_ranks);
...
create unique index UX_USERS_1 on is_users (nickname);

cize polia id_ranks, id_rights, id_miss, .. v tabulke is_users su tiez primarne kluce? ja tipujem, ze nie. Takze pekne na ne urobit indexy a uvidime co to spravi s rychlostou. A samozrejme aj index na Nickname, kedze podla neho robime vyber tiez.
Inak by nebolo odveci aj nacrtnut aky objem dat ta databaza obsahuje.

indexy standardne. unique ked tak na pole nickname pokial plati, ze v nom su len jednoznacne hodnoty (cize kazda sa v danom stlpci moze nachadzat len raz).
No ak je vsade po jednom riadku, tak problem bude niekde inde a nie v SQL a zrejme ti inexy momentalne nepomozu. Skus ten select pripadne priamo v nejakom mysql klientovi.

Tak problém je při volání této funkce, to trvá tak dlouho těch 1.04 sec:

Nevíte co s tím ?

function ziskat_udaje_clen_vse($uzivatel_jmeno)
{
   include ('connect.php'); // Zahrň soubor pro připojení k databázi
    
   $table = "is_users"; // Zvolení tabulky
    
   $query = "SELECT `is_users`.ID,Nickname,Email,Birthday,Joined,Donate,Last_online,Ranks,From_date,To_date,Reason,Miss_time,cw_description,cw_map,cw_datetime,Rights 
             FROM `is_users` 
             JOIN `is_rights` 
             JOIN `is_ranks` 
             JOIN `is_miss` 
             JOIN `is_cw` 
             ON (is_users.ID_rights = is_rights.ID AND
             is_users.ID_ranks = is_ranks.ID AND
             is_users.ID_miss = is_miss.ID AND
             is_users.ID_CW = is_cw.ID) 
             WHERE `is_users`.Nickname = '$uzivatel_jmeno'"; // Query pro všechny informace o daném členu (zatím pomocí ID) 
   
   $vysledek = mysql_query($query,$connect) or die (mysql_error($connect)); // Query příkaz výsledek ulož do proměnné výsledek
   
   include ('disconnect.php'); // Zahrň soubor pro odpojení z databáze
   
   return (mysql_fetch_assoc($vysledek)); // Asociativní Pole výsledků   
}

//Potom ji zavolam
$index_uzivatel = ziskat_udaje_clen_vse("Vasekdvor");

// a vypisuju takto
echo $index_uzivatel['Nickname'];

u connect to vypsalo taky 1, u disconnect 0, takže problém je prý u connect.
Ale connect používám furt ten samej, už jak dlouho a žádný problém jsem s ním neměl.

/* Definování proměnných pro připojení k databázi */
    define ("HOST","localhost");
    define ("USERNAME","root");
    define ("PASSWORD","");
    define ("DB","is_clan");  
    /* $Host = "localhost";
    $Username = "root";
    $Password = "";
    $db = "is_clan"; */
    
    $connect = mysql_connect(HOST,USERNAME,PASSWORD);
    mysql_select_db(DB,$connect) or die (mysql_error(DB));
    mysql_query("SET NAMES 'utf8'");

(Mysql_query("SET NAMES 'utf8'"); -> tím to není zkoušel jsem ho zakomentovat je to furt stejné.

1,04 sec načítání.

OMG no já se snad pos*** , taková prkotina. Windows 7 má problém se zjišťováním "localhost" pro IPv6 nebo IPv4 , proto se má už ve Vistách a ve Win7 používat raději 127.0.0.1.

Tím byl problém vyřešen. Při použití "localhost" se to načítalo 1,04s a při použití "127.0.0.1" už jen 50ms.

Díky vám všem za pomoc, tímto tento topic uzavírám.

Zpět do poradny Odpovědět na původní otázku Nahoru