Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> LIMIT 350,20? A może coś innego?
msulik
post 4.04.2002, 19:25:29
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


Wstęp: Napisałem skrypt do wyszukiwania w bazie danych. Skrypt ten umożliwia zaawansowane wyszukiwanie rekordów według kilku skomplikowanych kryteriów. Spodziewam się, że dość szybko ta baza osiągnie ponad tysiąc wpisów.

Problem: Przypuśćmy, że ktoś wpisał do bazy zapytanie, które zawiera zaawansowane opcje wyszukiwania włączając w to zagnieżdżone nawiasy, operatory logiczne itp. Zapytanie to zwróciło okolo 500 rekordów. Jasną rzeczą jest, że nie wypiszę tych wszystkich 500 wyników na jednej stronie, tylko powiedzmy w porcjach po 20.

Pytanie: Jak zrobić, żeby porcjować te wyniki bez ponownego wysyłania zapytania. Tzn. nie chcę stosować, powiedzmy,
Kod
SELECT * FROM moja_tabela WHERE (pole = 'abc' AND ...................) LIMIT 350, 20
bo to powoduje ponowne przetworzenie zapytania (co zajmuje czas!), a następnie obcięcie go do zaledwie 20 wyników. Jak to zrobić? Czy wysyłać cookie z numerami wyników, czy może przekazywać parametry w url'u, czy ewentualnie "spakować" te numery?

Rozwiązanie przez cookie albo url wydają się być nierealne, zważywszy na ilość potencjalnych rekordów do zwrócenia (przy 1000 wynikach rozmiar ten wyniesie około 3000 bajtów, co zniechęci do dalszych poszukiwań).
Go to the top of the page
+Quote Post
GeoS
post 5.04.2002, 14:41:24
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 0
Dołączył: --
Skąd: W - WA -> GRO

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


http://webdeveloper.pl/html/news/2001/04/21/121.php :-)
Go to the top of the page
+Quote Post
msulik
post 6.04.2002, 11:45:00
Post #3





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


Thx za link, ale...

Przeczytałem od deski do deski i nie znalazłem odpowiedzi na moje pytanie.

Chodzi mi o to, że nie chcę używać LIMIT, bo zapytanie może być skomplikowane i wtedy za każdym wywołaniem SELECT * FROM .... LIMIT ..,.. zapytanie to jest od nowa przetwarzane. A ja właśnie nie chcę, żeby było przetwarzane od nowa, bo to nie ma sensu.


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
GeoS
post 7.04.2002, 10:40:35
Post #4





Grupa: Zarejestrowani
Postów: 602
Pomógł: 0
Dołączył: --
Skąd: W - WA -> GRO

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


To ja innego rozwiazania niestety nie widze :-(

Niby jak to by miało wyglądać? Nie da sie sprawdzic, od którego wiersza miałoby zwracać wyniki i ile tych wierszy miałoby być pobieranych, w inny sposob niz z LIMITem.

Ja innej koncepcji nie mam :-(
Go to the top of the page
+Quote Post
GeoS
post 7.04.2002, 21:47:22
Post #5





Grupa: Zarejestrowani
Postów: 602
Pomógł: 0
Dołączył: --
Skąd: W - WA -> GRO

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


Warto tez pomyslec nad aplikacja cache'ujaca :-) To czesciowo rozwiazaloby twoj problem.
Jest kilka aplikacji (soft na serwer, a nie skrypty php) dostepnych za free :-)
Go to the top of the page
+Quote Post
msulik
post 7.04.2002, 23:25:03
Post #6





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


Cytat
Warto tez pomyslec nad aplikacja cache'ujaca :-)
tego się obawiałem...

Cytat
czesciowo rozwiazaloby twoj problem
a tego jeszcze bardziej się obawiałem...

Cytat
soft na serwer, a nie skrypty php
a o tym to nawet nie śniłem w najgorszych koszmarach...


Cóż, będę musiał zmusić mój mózg do poszukiwania dalszych rozwiązań. Thx.


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
carampuc
post 9.04.2002, 11:35:22
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 15.03.2002
Skąd: Gdańśk

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


Hi, Man!

Tak na szybko.
Załóż sobie tabelkę, która będzie miała takie pola jak te zwracane w zapytaniu wyszukującym + pole z id sesji użytkownika.
Druga tabelka będzie miała dwa pola: id sesji + treść zapytania.
Jeśli użuytkownik uruchomi wyszukiwanie po pierwsze w drugiej tabelce spradź, czy zapytanie to nie było już wcześniej wykonywane. Jeśli nie, wykonaj to zapytanie PEŁNE (bez LIMIT) i jego wynik (rekordy) wpisz do tabelki 1, dodając id sesji.
Po tym, lub też jeśli zapytanie już było, odczytaj odpowiednio dane z tabelki 1 dla właściwego id sesji.
To tak na szybko i ogólnie.
Powodzenia.
biggrin.gif
Go to the top of the page
+Quote Post
carampuc
post 9.04.2002, 11:36:43
Post #8





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 15.03.2002
Skąd: Gdańśk

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


POST SCRIPTUM:
Oczywiście co jakiś czas musisz czyścić obie tabele z nieaktualnych już id sesji...
:oops:
Go to the top of the page
+Quote Post
GeoS
post 9.04.2002, 21:56:02
Post #9





Grupa: Zarejestrowani
Postów: 602
Pomógł: 0
Dołączył: --
Skąd: W - WA -> GRO

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


Tylko nalezaloby przeprowadzic testy, na ile rozwiazanie z nowymi tabelami rzeczywiscie zoptymalizowaloby dzialanie calej aplikacji.
Moze sie okazac, ze bedzie duzo mniej wydajne, anizeli inne przedstawione sposoby.
Go to the top of the page
+Quote Post
kryr
post 10.04.2002, 06:47:46
Post #10





Grupa: Zarejestrowani
Postów: 268
Pomógł: 0
Dołączył: --
Skąd: kielce

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


Na zdrowy rozum, to powinno byc szybciej... Choc na pewno nie wtedy, gdy bedzie sie "odswiezac bufor" - ta 2 tabelke ze sesja...
Go to the top of the page
+Quote Post
carampuc
post 11.04.2002, 14:40:02
Post #11





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 15.03.2002
Skąd: Gdańśk

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


2 tabelka służy ona tylko temu, aby sparawdzić, czy korzystamy z tego samego zapytania. Jeśłi nie zmienimy zapytania (wybieranych danych) - czyli np/zmieniamy stronę - zysk będzie duży? Jeśli zmienimy zapytanie spowolnienie będzie niezauważalne.

Nie upieram się, że jest to rozwiązanie "genialne i najlepsze na świecie", ale czasami zapytania wybierające dane są na tyle skomplikowane i czasochłonne, że warto zastanowić się nad takimi patentami.
Chociaż z mojego doświadczenia wynika, że w 98% przypadków wystarczy dobrze dobrać indeksy - tych nigdy nie za mało i lepiej odżałować na nie trochę miejsca na serwerze.
rolleyes.gif
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: 1.06.2024 - 23:51