Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> create view nie wychodzi :(pomocy Subiekt GT
adamzuk
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 5.03.2010

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


Witam mam baze ms serwer 2005 jest tam cała baza subiekta. potrzebuje wyciagnac z niej informacje o sprzedazy danych towarów z okresu dwóch miesiecy, robie to za pomoca php i sql w siedziebie firmy, firma ma kilka odziałów. nie ma problemu z wyciagnieciem danych z oddziałów gdzie jest mala ilosc paragonów, jesli jest duza ilosc paragonów wystepuje bład:


Warning: mssql_query() [function.mssql-query]: Query failed in c:\usr\apache\httpd\html\home\jeden.php on line 29

Warning: mssql_num_rows(): supplied argument is not a valid MS SQL-result resource in c:\usr\apache\httpd\html\home\jeden.php on line 36
Brak poprawnych danych!
Warning: mssql_free_result(): supplied argument is not a valid MS SQL-result resource in c:\usr\apache\httpd\html\home\jeden.php on line 61

zapytanie jest nastepujace:

select t.tw_Nazwa AS "Nazwa" , SUM (ob_IloscMag) as "suma", t.st_Stan as "stan"
FROM vwDokumenty d INNER JOIN vwTowar t on d.ob_towid =t.tw_Id
WHERE (t.st_MagId=1) and
(d.dok_DataWyst BETWEEN "'.$60_dni_wstecz.'" AND "'.$obecna_data.'" ) AND t.tw_Nazwa LIKE "PAPIEROSY%" and (d.dok_Typ = 21)
group by t.tw_Nazwa, t.st_Stan

jesli zapytanie wykonuje bezposrednio w odziale to wykonuje sie ale trwa okolo 2 min, byc moze dlatego wystepuje ten blad? moze jest za krótki czas oczekiwania na odpowiedz serwera? moze ktos wie jak to zrobic zeby działało?
zeby skrócic ten czas postanowiłem ze zrobie "widok" zeby było szybciej, niestety widok nie chce sie wykonac kod widoku jest nastepujacy:


create view papieros as
select t.tw_Nazwa AS "Nazwa" , SUM (ob_IloscMag) as "suma", t.st_Stan as "stan"
FROM vwDokumenty d INNER JOIN vwTowar t on d.ob_towid =t.tw_Id
WHERE ((t.st_MagId=1)
AND t.tw_Nazwa LIKE 'PAPIEROSY%' and (d.dok_Typ = 21))
group by t.tw_Nazwa, t.st_Stan

pokazuje sie nastepujace okno błedu
(IMG:http://tobaccopress.pl/22.jpg)


czy moze ktos z was wie jak te problemy roziwazac??(IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ostatnia linijka jak byk mówi: "Upłynął czas oczekiwania. Dozwolony czas oczekiwania jest krótszy niż trwająca operacja lub serwer nie odpowiada", więc dobrze podejrzewasz (IMG:style_emoticons/default/smile.gif) Aby przyspieszyć wykonywanie zapytania na początek radziłbym Ci tak poprzemieszczać warunki w WHERE, żeby były one już na starcie jak najbardziej okrawające. Czemu? Masz 10.000 rekordów. Do pierwszego pasuje 8.000, drugiego - 5.000, a trzeciego 1.000, zaś czwartego 50. Od którego zacząłbyś? Logiczne, że od 4, bo zamiast mieć dużo po każdym kroku i odcinać po trochu, każde kolejne sprawdzenie sprawdza już na nie 8k, potem 5k, a dalej 1k by zakończyć na 50, ale każde kolejne sprawdza już tylko owe 50 po pierwszym przejściu. Ilość operacji jest więc kilkunastokrotnie mniejsza od samego początku. Poza tym operacje na choćby polach indeksowanych są bardzo szybkie, więc od nich też bym zaczynał w pierwszej kolejności. Dzięki temu czasy powinny Ci się mocno pozmieniać, mimo faktu, że zapytania nie różnią się niczym pod kątem logicznym, a jedynie kolejnością w warunku WHERE (IMG:style_emoticons/default/smile.gif)

EDIT: To jest właśnie optymalizacja zapytania. Szkoda, że tak fajnie się tylko w przypadku AND robi. OR rządzi się nieco innymi prawami już...
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 04:09