Avatar billede javascript Nybegynder
18. oktober 2005 - 21:49 Der er 11 kommentarer og
1 løsning

gøre server hurtigere.. bedre kode

hej.. kan i give nogle gode tips og tricks til at gøre en server hurtig.. fx. et trick er ikke brug * kun det man skla hente ud fra mysql..


har i andre gode til at lave en god solid hjemmeside som kan holde til over flere tusinde online?????


i deler points
Avatar billede coderdk Praktikant
18. oktober 2005 - 23:10 #1
Den med * er altid god, kun tag de felter du bruger.
Hvis du nogen steder bruger paging, så sørg for i stedet for at lave en SELECT COUNT() og så en SELECT bagefter, så brug SELECT SQL_FOUND_ROWS og SELECT FOUND_ROWS() - Det er blidere mod serveren.
Fyr de mest almindelige queries af i en mysql console, med EXPLAIN (altså EXPLAIN SELECT felt, felt2 FROM tabel osv) og se om de er optimale - temp tables, full table scans osv er ikke godt, ej heller filesorts... Hvis sådanne optræder skal man nok finde nogle bedre indexes eller dele queries op...
Brug LigHTTPD i stedet for apache...?
Kan ikke lige komme på flere :)
Avatar billede javascript Nybegynder
19. oktober 2005 - 20:40 #2
oki.. du får points... men kan du så få denne hurtigere??




$postZ2Z = mysql_query("SELECT tekst, fra FROM admin_txt WHERE `time` = $tid-4");

$ialtPostZ2Z = mysql_num_rows($postZ2Z);

$zdZ2Z = mysql_fetch_array($postZ2Z);
if($ialtPostZ2Z == 0) {

echo "";

} else {

echo "<script type=\"text/javascript\">parent.topicBot('<br>$zdZ2Z[tekst] </font><br>Fra: $zdZ2Z[fra]');</script>";

}
Avatar billede coderdk Praktikant
19. oktober 2005 - 20:46 #3
Den burde være hurtig nok ;) Specielt hvis du laver et index på feltet time :)
Vi kan godt dele pointene hvis det er :)
Jeg ville have skrevet det sådan:

$sql = "SELECT tekst, fra FROM admin_txt WHERE `time` = $tid-4";
$postZ2Z = mysql_query($sql);

if(mysql_num_rows($postZ2Z) > 0) {
  $zdZ2Z = mysql_fetch_array($postZ2Z);
  echo "<script type=\"text/javascript\">parent.topicBot('<br>$zdZ2Z[tekst] </font><br>Fra: $zdZ2Z[fra]');</script>";
}

:)
Avatar billede javascript Nybegynder
19. oktober 2005 - 20:47 #4
har index på feltet..
giver det så nogle ændringer??
Avatar billede coderdk Praktikant
19. oktober 2005 - 20:48 #5
Det burde det faktisk ikke - Du kan se det vha lave en EXPLAIN i en console og se hvad den skriver med og uden...
For øvrigt, glemte at ændre noget:

$sql = "SELECT tekst, fra FROM admin_txt WHERE `time` = $tid-4";

Ville jeg havd skrevet som:

$sql = "SELECT tekst, fra FROM admin_txt WHERE `time` = " . ( $tid - 4 );
Avatar billede javascript Nybegynder
19. oktober 2005 - 20:51 #6
nytter jo ikke hvis det ingen ændringer gør!??

har du andre tips så??

hva mener du med

"Fyr de mest almindelige queries af i en mysql console, med EXPLAIN (altså EXPLAIN SELECT felt, felt2 FROM tabel osv) og"
Avatar billede coderdk Praktikant
19. oktober 2005 - 21:05 #7
Du kan muligvis også gøre det med phpMyAdmin hvis du ikke har adgang til en console (måske har PMA endda værktøjer til det?) - En explain ser sådan ud:

mysql> explain select article.headline, user.username from article inner join user on article.byuser = user.userid where article.byuser = 1;
+---------+-------+---------------+---------+---------+-------+------+-------------+
| table  | type  | possible_keys | key    | key_len | ref  | rows | Extra      |
+---------+-------+---------------+---------+---------+-------+------+-------------+
| user    | const | PRIMARY      | PRIMARY |      4 | const |    1 |            |
| article | ALL  | NULL          | NULL    |    NULL | NULL  |    4 | Using where |
+---------+-------+---------------+---------+---------+-------+------+-------------+
2 rows in set (0.00 sec)

Her kan du se hvordan MySQL serveren behandler query'en - Du kan se "key" er NULL begge steder her, hvilket betyder at den er nødt til at kigge på alle rækker (se "rows") i tabellen - Hvis jeg så tilføjer et index på byuser ser den sådan ud:

mysql> alter table article add index (byuser);
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> explain select article.headline, user.username from article inner join user on article.byuser = user.userid where article.byuser = 1;
+---------+-------+---------------+---------+---------+-------+------+-------------+
| table  | type  | possible_keys | key    | key_len | ref  | rows | Extra      |
+---------+-------+---------------+---------+---------+-------+------+-------------+
| user    | const | PRIMARY      | PRIMARY |      4 | const |    1 |            |
| article | ref  | byuser        | byuser  |      4 | const |    2 | Using where |
+---------+-------+---------------+---------+---------+-------+------+-------------+
2 rows in set (0.00 sec)

Her kan du se at den nu benytter indexet og det gør query'en væsentligt hurtigere!
"Faretegn" i en explain er hvis "Extra" indeholder "filesort" eller "temporary table" eller hvis den ikke bruger nogen "key"...
Avatar billede javascript Nybegynder
19. oktober 2005 - 21:05 #8
coder??? du bruger sQ da oxo mysql_num_rows man??


"Hvis du nogen steder bruger paging, så sørg for i stedet for at lave en SELECT COUNT() og så en SELECT bagefter, så brug SELECT SQL_FOUND_ROWS og SELECT FOUND_ROWS() - Det er blidere mod serveren."
Avatar billede javascript Nybegynder
19. oktober 2005 - 21:07 #9
ja.. jeg bruger indeks på alt jeg henter (WHERE ej = 'asas' ) fx. så bliver indeks på ej
Avatar billede coderdk Praktikant
19. oktober 2005 - 21:08 #10
Well ja, men det her er jo ikke paging ;) En typisk paging query (med sidetal 1 2 3 osv) bruger LIMIT i SQL'en - og så kan man ikke få det totale antal rækker, så skal du enten bruge SELECT COUNT() først (dårligt) eller bruge SQL_FOUND_ROWS (godt) :)
Avatar billede javascript Nybegynder
19. oktober 2005 - 21:13 #11
har du andre trickz?
Avatar billede coderdk Praktikant
19. oktober 2005 - 21:18 #12
Hmnææh ikke lige i hovedet nu - Du kan eksperimentere med at bruge ob_start/ob_gzhandler: http://dk2.php.net/ob_gzhandler - Eller hvis du har en server med apache, så mod_gzip eller bedre adgang til php.ini og bruge zlib.output_compression det kan man af og til vinde en del ved ;) (Det sparer også båndbredde)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester