Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Długi czas zapytania w PHP - w Workbench nie
Forum PHP.pl > Forum > Bazy danych
TomASS
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 sad.gif
Tomplus
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.

TomASS
Cześć, skąd mam wiedzieć jakie będą czasy skoro nie mam echo gentime()? smile.gif
Jak dam die(...) to też nie dojdzie do linii file_put_contents
viking
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.
TomASS
Czasy takie same - długie.

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

Chyba coś z kodowaniem 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 sad.gif
nospor
Zrob EXPLAIN i bedziesz wiedzial co jest wolne
TomASS
Cytat(nospor @ 16.11.2017, 15:10:34 ) *
Zrob EXPLAIN i bedziesz wiedzial co jest wolne


Cześć - zrobiłem ale nic nie odkryłem sad.gif
nospor

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
TomASS
Daje to samo :/
Pyton_000
Pokaż całe zapytanie na początek.
TomASS
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 sad.gif
Na "starym" mam czas 18sekund, na "nowym" <0,2s sad.gif

Oto Explain - czymś się różnią - tylko nie wiem czym sad.gif
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-2024 Invision Power Services, Inc.