Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MYSQL, EXPLAIN
bcn
post 3.07.2010, 09:41:14
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 3.07.2010

Ostrzeżenie: (0%)
-----


Witam,
mam dwie bazy danych w ramach jednego serwera, obie o takiej samej
strukturze, posiadaja podobna ilosc danych i na bazie1 zapytanie:

SELECT tmp.pesel,ew.wynik,ew.wynik_p,ew.wynik_r,o.imie,o.nazwisko

FROM _tmp_ew_wpr_lista as tmp
LEFT JOIN egzaminy_wyniki ew ON (tmp.egzamin=ew.egzamin AND
tmp.pesel=ew.pesel AND ew.studia="")
LEFT JOIN osoby o ON (tmp.pesel=o.pesel)
WHERE tmp.egzamin="EGZ_PRK_KONS"
ORDER BY tmp.pesel LIMIT 0,50;

wykonuje sie bardzo szybko a na bazie2 wolno(~30sek).

Zrobilem EXPLAIN QUERY i mam nastepujace wyniki:
baza1: http://wklej.org/id/359597/
baza2: http://wklej.org/id/359598/

Z tego co rozumiem to w przypadku bazy2 nie korzysta z indeksow.
Oto wynik SHOW INDEX dla bazy2(tabela egzaminy_wyniki, alias ew):
http://wklej.org/id/359601/

Nie jestem programista tej aplikacji, nie wiem tez gdzie szukac
problemu. Jak to moge poprawic? Jezeli potrzebne sa jeszcze jakies
informacje prosze pisac. Z gory dziekuje za pomoc.


EDIT:
ok, udalo mi sie znalesc jedna roznice: teraz w tabeli egzaminy_wyniki(alias ew) numer pesel ma dlugosc 255znakow(w starych bazach mial dlugosc 20znakow) podczasy gdy w innych tabelach ma dlugosc 32. Czy to moze byc przyczyna?

Ten post edytował bcn 3.07.2010, 10:28:36
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Mchl
post 3.07.2010, 10:28:53
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


A SHOW INDEX dla bazy1?
Jakie wersje MySQL na obu serwerach?
Go to the top of the page
+Quote Post
bcn
post 3.07.2010, 11:00:44
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 3.07.2010

Ostrzeżenie: (0%)
-----


Cytat(Mchl @ 3.07.2010, 11:28:53 ) *
A SHOW INDEX dla bazy1?
Jakie wersje MySQL na obu serwerach?


prosze show index: http://wklej.to/KtfT
mysql troche archaiczny: 5.0.24

Zauwazylem tez zmiane, teraz w egzaminy_wyniki(ew) pesel ma dlugosc 255znakow, na wczesniejszej wersji bazy mial 20znakow. Czy to moze byc przyczyna? Gdzie znalesc przyczyne dlaczego nie uzywa indeksow tylko tak 'muli' to zapytanie?
Go to the top of the page
+Quote Post
Mchl
post 3.07.2010, 11:34:34
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Tak, to może być przyczyna (aczkolwiek wątpię). Dla PESELu wystarczy CHAR(11) w kodowaniu ascii, tak czy inaczej zyskasz na zmianie.

Pokazałbyś jeszcze SHOW CREATE TABLE
Go to the top of the page
+Quote Post
bcn
post 3.07.2010, 12:53:59
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 3.07.2010

Ostrzeżenie: (0%)
-----


Cytat(Mchl @ 3.07.2010, 12:34:34 ) *
Tak, to może być przyczyna (aczkolwiek wątpię). Dla PESELu wystarczy CHAR(11) w kodowaniu ascii, tak czy inaczej zyskasz na zmianie.

Pokazałbyś jeszcze SHOW CREATE TABLE



oto show create table dla tabeli egzaminy_wyniki:
baza1: http://wklej.org/id/359686/
baza2: http://wklej.org/id/359687/

co do zmian to i owszem, wiadomo, ze pesel az taki dlugi nie jest, niestety z tej bazy korzysta juz aplikacja, ktora dziala produkcyjnie, wiec takie zmiany moge zasugerowac autorom przy nastepnej rekrutacji:) Teraz musze znalezc przyczyne tych wolnych zapytan

EDIT:
znalazlem jeszcze inne roznice:
SHOW CREATE TABLE dla tabeli _tmp_ew_wpr_lista
baza1: http://wklej.org/id/359698/
baza2: http://wklej.org/id/359693/
zmienilo sie kodowanie

SHOW CREATE TABLE dla tabeli osoby:
baza1: http://wklej.org/id/359700/
baza2: http://wklej.org/id/359701/
rowniez roznica w dlugosci peselu oraz obie tabele maja kodowanie latin2

Ten post edytował bcn 3.07.2010, 14:17:39
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 09:47