Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: szybkość mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
acztery
Witam,

Mam MySQL 4.0.23 php. 5.0.3 Apache 2.0.52.



W jednej z table w bazie mam 250.000 rekordów. Wykonanie skryptu który mial by ( wylistować wszystkie rekordy wypozycjonować itp ) trwa bardzo długo. ( ok 3 min ) czasem wyskakuje błąd że mysql nie odpowiada wiesza sie komp itp.


Co zrobieć żeby to było szybciej

Zmiana na mysql 5 była by rozwiązaniem a może zmiana typu baz na PostgresSQL. Juz nie wiem przy 25 tys jest ok.

zapytania sa napisane tak optymalnie że sie bardziej nie da.?
Kinool
Cytat(acztery @ 2005-11-16 16:33:59)
zapytania sa napisane tak optymalnie że sie bardziej nie da.?

pytasz sie nas czy zapytana sa opytamalne? a niby na jakiem podstawie ktos moze to stwerdzic nie widzac ich smile.gif

tak na marginesie to nie wiem czy to php czy MySQL zamula jesli chesz wybierac i wyswietlach 250 000 pozycji z bazy
Cytat
czasem wyskakuje błąd że mysql nie odpowiada wiesza sie komp
sugeruje ze to wina MySQL ale lepiej pokaz tabele, relacje i zapytania

INDEXOW chyba uzywasz? smile.gif
acztery
nie pytam o zapytania ... indeksów uzywam

na marginesie nie wyswetlam wszystkich naraz tylko porcjami
ghostrider
ja pracuje na mySQL 4.1, na bazach danych zawierajacych blisko 200.000 wpisów, i testy które robiłem zanim wybrałem mySQL wykazywały ze zapytanie o wszystkie wpisy trwało 0.2 sekundy, problemem był php, on jest wolny. trzeba było LIMIT-ów uzywać w zapytanich aby do minimum ograniczyć prace jaka miał wykonać php.

pokaż nam tabele i zapytania.

i jeszce przyszło mi do głowy ze php ma w php.ini
dyrektywe
memory_limit , i mozna by tam pokombinować, zwiększyć przydział
SongoQ
Zastanawiam sie po co tyle danych ciagniesz? Wszystko to wyswietlasz? Jesli jest tyle danych to zrezygnuj z interwencji php i zwracaj dane takie jakie maja zostac wyswietlone.
Kinool
dokladnie tak jak pisze SongoQ php powinno byc wykozystane tylko tam gdzie baza nie da rady! czyli tak wykonywac zapytania by zwracaly dane ktore zmaiezmy wyswietlic, wszelkie sortowania czy porcjowania robic na bazie a nie na php
acztery
wyswetlam po 35 rekordów. ale w miedzy czasie. Pobieram

rekordy dotyczące kategorii , sesji, opisów, szablonu, uzytkownika.

no i proste zliczanie tego zapomocą count();

do tego porcjowanie 1,2,3,4,5,6,7,8,9,10.....34242 itd.

Czy przejscie na postgres bylo by rozwiazaniem ? czy ta baza jest szybsza czy poprostu zainstalować mysql 5 nie wiem ..

Planuję zrobić cos takiego gdzie w etapie koncowym bedzie okkolo 5 mil rekordów ( nie moge napisac co ) czy moze zrobic tak ze kazda kategoria bedzie miala swoja tabele ? ale to bez sensu :/ chyba

aaaa

uzywam limitow itp przeciez nie wyswetlil bym tak odrazu 250 tys glupi nie jestem
SongoQ
Cytat
Czy przejscie na postgres bylo by rozwiazaniem ? czy ta baza jest szybsza czy poprostu zainstalować mysql 5 nie wiem ..

Postgres nie z takimi danymi sobie radzi. Ale PG to nie tylko zwykly select czy insert to dodatkowe mechanizmy do triggerow, funkcji, widokow, itd.....
acztery
ok to teraz jak bym chcial zmienic to naPs starczy jak zmienie np mysql_result na pg_result i tak z wszystkim czy musze sie wszystko od nowa?
SongoQ
W prostych rzeczach tak, gorzej jak uzywasz funkcji wbudowanych tylko w MySQLa. Jaki widze problem to jesli w nazwach pol i tabel stosowales ` w PG czegos takiego nie ma.

Taka zmiana jest szybka ale wtedy nie wykorzystasz calej mocy PG. Zastanow sie nad przebudowa kodu.
Kinool
z tego co wiem to w wiekszosci przypadkow (INSERTY, SELECTY) MySQL jes szybszy od PostgreSQL wiec nie wiem czy zalatwisz tym sprawe!

moze masz zle skonfigurowanego MySQL, wiele zalezy od optymalizacji samego serwera. Ja uzywam MySQL ba bazie gdzie w tabelach jest po kilkadziesiat tysiecy rekordow z relacjami i generowanie strony to ulamki sekund!
acztery
kilka dziesiąc a kilkaset to roznica , jak wyzej mowilem musial by to wszystko byc bardzo szybkie przy ponad 2 miljonach rekordów.

może wina jest taka ze zapytanie łączy sie z 3 tabelami naraz moze to byc powod ? kod pokaze pozniej moze cos jeszcze wymysle
SongoQ
Cytat
może wina jest taka ze zapytanie łączy sie z 3 tabelami naraz moze to byc powod ? kod pokaze pozniej moze cos jeszcze wymysle


Indeksy, ulozenie tabel i warunkow niby wydaje sie nic takiego ale zawsze ma to wplyw na szybkosc przetwazania danych.
artko
z całą stanowczością mogę stwierdzić że mysql w wersji 4 znakomicie radzi sobie z tabelami zawierającymi ponad 3,5 miliona rekordów. przy dobrym poindeksowaniu, wybranie kilkuset rekordów z takiej tabeli wg określonego kryterium trwa, o zgrozo, 0,0006 - 0,0007 sek. co innego prezentacja tych danych na ekranie.
dane te są prawdziwe na bardzo szybkim sprzęcie, ale bez przesady: pentium 4 3,2 , 1 GB ram, mandrake 10.1., sieć lokalna. zaznaczam że nie używam do tak ogromnych baz php.
SongoQ
Cytat
zaznaczam że nie używam do tak ogromnych baz php.

W tym przypadku php czy inny jezyk nie ma znaczenia. Najwazniejsza i tak jest baza danych gdzie i tak cale mielenie danych jest na bazie.
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.