Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Długi czas zapytania w PHP - w Workbench nie
TomASS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cześć,

mam zapytanie w SQL.
W skrypcie PHP wykonuje się 30-50sekund:
  1. gentime();
  2. $query = "xxxxx";
  3. $result = mysql_query($query);
  4. echo gentime();



Przy pomocy PHP MyAdmin (zdaje się, że inny serwer www) wykonuje się zdecydowanie szybciej 2-3s.
Przy pomocy MySQL Administrator lub MySQL Workbench działa też szybko

:/

Co może być nie tak z ustawieniami?

Dodatkowo zauważyłem, że jak dodam:
  1. mysql_query("SET NAMES utf8 COLLATE utf8_polish_ci");


to działa szybciej (zdecydowanie)

ale części wyników (zawierające polskie znaki) nie zwraca (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Tomplus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 885
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

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


Daj zamiast echo gentime();
  1. die(gentime());

a później:
  1. file_put_contents("file.json", json_encode($results));

I powiedz wtedy jakie masz czasy wykonywania.

Bo wydaje mi się że po prostu masz problem z wyświetleniem wszystkich danych na stronie. Dlatego zaproponowałemm aby zapisać je do pliku json.
A potem spróbuj pobrać ten plik normalnie.

Go to the top of the page
+Quote Post
TomASS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cześć, skąd mam wiedzieć jakie będą czasy skoro nie mam echo gentime()? (IMG:style_emoticons/default/smile.gif)
Jak dam die(...) to też nie dojdzie do linii file_put_contents
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


gentime tez sobie możesz do pliku zapisać. Mogą być winne tez skrypty np. przypinanie zdarzenia do każdego elementu oddzielnie. Sposobem Tomplus zweryfikujesz co się dzieje.
Go to the top of the page
+Quote Post
TomASS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Czasy takie same - długie.

Nie wyświetlam wyników więc nie ma z tym problemu :/

Chyba coś z kodowaniem (IMG:style_emoticons/default/sad.gif)


W polu mam kilka statusów "awizowany" oraz "wysyłka"
Na te pole mam indeks

gdy daję:
  1. SELECT * FROM tabela WHERE STATUS IN ('awizowany')


szybko
  1. SELECT * FROM tabela WHERE STATUS IN ('awizowany','wysyłka')

wolno

  1. SELECT * FROM tabela WHERE STATUS IN ('wysyłka')

wolno


gdy tylko polski znak pojawi się w zapytaniu - jest wolno (IMG:style_emoticons/default/sad.gif)

Ten post edytował TomASS 16.11.2017, 14:21:48
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




Zrob EXPLAIN i bedziesz wiedzial co jest wolne
Go to the top of the page
+Quote Post
TomASS
post
Post #7





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Cytat(nospor @ 16.11.2017, 15:10:34 ) *
Zrob EXPLAIN i bedziesz wiedzial co jest wolne


Cześć - zrobiłem ale nic nie odkryłem (IMG:style_emoticons/default/sad.gif)
(IMG:http://oi64.tinypic.com/1fwi6g.jpg)
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004





miales zrobic explain z poziomu php bo tam ci niby muli. Jesli efekt explain bedzie taki sam, to juz wiesz ze to nie wina zapytania z poziomu php
Go to the top of the page
+Quote Post
TomASS
post
Post #9





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Daje to samo :/
Go to the top of the page
+Quote Post
Pyton_000
post
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Pokaż całe zapytanie na początek.
Go to the top of the page
+Quote Post
TomASS
post
Post #11





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


zapytanie:
  1. SELECT COUNT( * ) AS Ile, T.Real_mag_wbt, T.Numer, T.trading_zamowienia, T.nrFe, T.Odbiorca_Nr_SAP, T.Odbiorca_nazwa, T.NumerRefSecondary, T.Towar_mix, T.ID_grupa_transportowa, T.Typ_dostawy, T.NumerRef, T.HD, T.Multistop, T.Kierowca, T.Telefon, T.Pojazd, T.ID_przewoznik, T.ID, T.DateRealizacji, T.STATUS, Pr.Nazwa AS Przewoznik, RodzajCiezarowki, T.ZmianaAwizacji, Pr.NrSAP, TM.ID_podmiot, Dost.Nazwa AS Dostawca, Wbt.Nazwa AS Dostawca2
  2. FROM m_transporty AS T
  3. LEFT JOIN m_transporty_miejsca AS TM ON ( T.ID = TM.ID_transport )
  4. LEFT JOIN m_przewoznicy AS Pr ON ( Pr.ID = T.ID_przewoznik )
  5. LEFT JOIN m_wbt AS Wbt ON ( Wbt.Numer = T.Real_mag_wbt )
  6. LEFT JOIN s_dostawcy AS Dost ON ( Dost.ID = T.ID_dostawca )
  7. WHERE TM.ID_podmiot =103
  8. AND TM.Rodzaj = 'zaladunek'
  9. AND Miejsce = 'akt'
  10. AND T.ID_grupa_transportowa =4
  11. AND T.ImportFE = '1'
  12. AND 1
  13. AND T.STATUS
  14. IN (
  15. 'przekazane do Wysyłki', 'awizowany'
  16. )
  17. AND (
  18. ID_przewoznik IS NOT NULL
  19. OR T.Typ_dostawy = 'odbiorcy'
  20. )
  21. GROUP BY Numer, ID_przewoznik



Dodatkowo przeniosłem te tabele na inny serwer MySQL i zrobiłem porównanie - mega różnica (IMG:style_emoticons/default/sad.gif)
Na "starym" mam czas 18sekund, na "nowym" <0,2s (IMG:style_emoticons/default/sad.gif)

Oto Explain - czymś się różnią - tylko nie wiem czym (IMG:style_emoticons/default/sad.gif)
(IMG:http://oi65.tinypic.com/bdobgh.jpg)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.12.2025 - 18:55