Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: optymalizacja kodu (PHP, MYSQL)
Forum PHP.pl > Forum > PHP
lysyluszowice
Witam,
mam problem z szybkością skryptu.
Otóż przy małej ilości danych skrypt działa świetnie szybko, przy dużych ilościach danych skrypt działa 10 razy wolniej, skrypt napisany jest na smartach.
Oto kawałek kodu:

if (is_numeric ($_SESSION["rodzaj"]))
{
//$miasto = mysql_query ('SELECT asortyment_name'.LANG.' FROM asortyment WHERE asortyment_id '.$_SESSION["rodzaj"].'');
//korekta dla nowych danych
$miasto = mysql_query ('SELECT asortyment_name'.LANG.' FROM asortyment WHERE asortyment_id IN ('.$_SESSION["rodzaj"].')');
$dane = mysql_fetch_array ($miasto);
$rodzaj = $dane["asortyment_name".LANG];
}


case "rodzaj":
case "asortyment":
if (isset ($_GET['b']) && is_numeric ($_GET['b'])) $_SESSION['asortyment_id'] = $_GET['b'];
$sql_mod = 'ogloszenie_rodzaj IN ('.$_SESSION['asortyment_id'].')';

$res = mysql_query ('SELECT asortyment_name'.LANG.' as asortyment_name FROM asortyment WHERE asortyment_id IN ('.$_SESSION['asortyment_id'].')');
$typ_szukania = SPIS_RODZAJ.' - ';
$obiekt_szukania = mysql_result ($res, 0, 0);
break;


Jak można przyspieszyć działanie tych zapytań?
nospor
Uzywaj bbcode!!!

Kod co pokazales nic nie mowi, dlaczego mialoby dzialac 10x wolniej. Jest to jakis maly wyciety kawalek. Nie wiadomo czy są tam petle czy inne rzeczy, ktore mogą opóźniać
kosmowariat
http://xdebug.org/
MWL
http://phpbench.com/
ultra_18
nie czaje wcale tych twoich zapytan ;| , one wogle działaja?questionmark.gif? skoro nie używasz znaków ucieczki i cały czas ten sam znak i zaczynasz zapytanie od ' a konczysz na " .


Cytat(lysyluszowice @ 19.11.2008, 10:08:29 ) *
//$miasto = mysql_query ('SELECT asortyment_name'.LANG.' FROM asortyment WHERE asortyment_id '.$_SESSION["rodzaj"].'');


żeby zwrócić wynik zapytania w select to być musiał dopisac jeszcze (np.) $wynik = mysql_fetch_row($miasto); jeżeli oczywiście wogle $miasto dziala w co śmiem wątpić. Jeżeli chodzi o optymalizacje to utworzenie indeksów dla wierszy tabeli zwieksza szybkość operacji na tych tabelach. Indeksy same sie tworzą dla kluczy podstawowych (PRIMARY KEY) a jeżeli nie masz w niektórych kolumnach to sam utwórz takowe dla najcześciej wybieranych rekordów. A co do czasu działaniu skryptu to można to zmierzyć , umieść na samym początku :

$time = microtime();

a na samym koncu

echo 'Czas wykonania skryptu to: '. (microtime()-$time) * 1000000 .' mikrosekund';

1000 mikrosekund to 1 mili sekunda czyli naprawde nie wiele.
pinochet
Zdarzało mi sie ze w mysql-u był domyslnie ustawiony InnoDb jeżeli nie potrzebujesz zmien na myisam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.