acztery
16.11.2005, 15:33:59
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
16.11.2005, 15:54:47
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

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?
acztery
16.11.2005, 15:56:43
nie pytam o zapytania ... indeksów uzywam
na marginesie nie wyswetlam wszystkich naraz tylko porcjami
ghostrider
16.11.2005, 16:11:41
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
16.11.2005, 17:29:58
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
16.11.2005, 17:39:18
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
16.11.2005, 19:00:21
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
16.11.2005, 19:17:10
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
16.11.2005, 19:19:21
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
16.11.2005, 21:50:34
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
16.11.2005, 22:31:20
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
16.11.2005, 23:19:11
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
16.11.2005, 23:52:47
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
18.11.2005, 16:20:38
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
18.11.2005, 17:40:01
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.