Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Zend_Db - wydajność
Forum PHP.pl > Forum > PHP > Frameworki
Crazy_Ivan
Witam

Mam problem z długością wykonywania zapytania do bazy. Wszystko pięknie działało jeszcze jak miałem gdzieś około 420 rekordów. Po zwiększeniu bazy do 520 rekordów po prostu nie wyrabia i wynikiem jest pusta strona.

  1. <?php
  2. $where .= " WHERE SLO_haslo LIKE '$haslo%'";
  3. (...)
  4.    $registry = Zend_Registry::getInstance();
  5.    $db = $registry->get('db');
  6.    $query = 'SELECT count(*) FROM slownik'.$where;
  7.    $hasla = $db->fetchAll($query);
  8. ?>


Nie wiem czy to jest spowodowane powolnym Framem czy też ja jakoś źle pobieram te dane ? Ma może ktoś jakiś pomysł ? Prosił bym o pomoc.
LBO
Ogólnie wyszukiwanie po % nie należy do najszybszych (jeżeli da rade zrezygnuj z tego) i wydajniejszych rzeczy.
Może pomógłby indeks na SLO_haslo o raz COUNT(klucz_glowny_tabeli).
Crazy_Ivan
Niestety żądnej różnicy. Nawet po usunięciu całego WHERE. Jest to dla mnie strasznie dziwne bo 510 rekordów to nie jest wielka liczba :|.
wookieb
A próbowałeś to zapytanie zapodać ręcznie w phpmyadmin? Zobacz wtedy prędkość.
Crazy_Ivan
Testowałem już to w phpMyAdmin i wszystko grało dlatego mój typ padł na klasę Zend_Db. Jednak właśnie doszedłem do tego że myliłem się. Wszystko się rozbiło w widoku. Przy obróbce danych. Wyświetlam hasło oraz klika pierwszych słów z opisu. Oczywiście nie chciałem żeby mu ucinało w połowie słowa wiec dopisałem mały upgrade. Właśnie zastanawia mnie fakt dlaczego to tak się rozbija gdyż mam zrobione stronicowanie i maksymalna wielkość tablicy jaka jest przekazywana liczy 10 elementów.

W taki sposób obrabiałem opis, po wykomentowaniu wszystko ruszyło.

  1. <?php
  2. $ile=60;
  3. $opis = strip_tags($hasla['SLO_tresc']);
  4. /*
  5. if($opis[strlen($opis)-1] != ' ')  $opis .= ' ';
  6. if ($ile > strlen($opis)) $ile = strlen($opis);
  7. while ($opis[$ile] != ' ')
  8. {
  9.     $ile++;
  10. }
  11.  */
  12. echo substr($opis,0,$ile).' (...)' ;
  13. ?>
eai
Sprawdź memory_limit, ZF tworząc obiekty pożera sporo pamięci. Przy kilku rekordach nie będzie problemu, lecz jeśli pola tekstowe są pokaźnych programów może Ci się skończyć pamięć smile.gif

Druga sprawa to PDO. ZF używa biblioteki pdo mysql do łączenia się z bazą, natomiast phpmyadmin bezpośrednio mysql (o ile dobrze pamiętam), czasami miałem problemy z PDO ale to przy bardziej złozonych zapytaniach smile.gif.

Zwiększ limit do 512M w php.ini i sprawdź.


BTW: Zainteresuj się silnikiem MYISAM + indeksy FULLTEXT.
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html, oferuje wiele ciekawych funkcji do wyszukiwania haseł + obliczanie trafności wyniku.
Crazy_Ivan
Dzięki wszystkim za odpowiedz. Problem był trywialny. Wszystko rozbijało się pętli gdy próbowałem sprawdzić wartość w tablicy która wykraczała poza zakres indeksu.
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.