Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ SQL ] Długość zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
mkozak
Może to nie najodpowiedniejsze miejsce, ale liczę na to, że tu same fachury siedzą biggrin.gif

Pytanko - jak wpływa długość zapytania SQL-owego na szybkość interpretacji i czy wogóle zbyt długie zapytanie ma negatywny wpływ na transakcje.

Np Robię SELECT-a, który ma postać

SELECT * FROM users WHERE (id=2 or id=4 or ..... or id = 100 or id = 102) and email like '%@php.pl;

Wyciągam co drugiego dodatkowo zawężając do grupy tylko z domeny php.pl i mam zapytanie na kilka linijek.

Testowałem to w praktyce i jest dobrze przy ilości idków kilkadziesiąt, czy kilkaset.

Tak teoretycznie - jak wpływa na silnik bazy długość zapytania.
nospor
oto:
id=2 or id=4 or ..... or id = 100 or id = 102
pisze sie tak:
id in (2,4,8,16,....,102)
pozatym skoro to parzyste to moglbys sie pokusic o funkcje matematyczne

dlugosc zapytania nie moze byc za dlugo, gdyz mysql ma ograniczenia jakies tam na dlugosc.

i czemu dales to na php? przenosze
Cysiaczek
To zależy, ile rekordów musi baza obsłużyć. Myślę, że nie musisz się przejmować, jeśli nie idą w miliony.
W tym wypadku nie widze problemów z wydajnością, bo nie wierzę, żebyś miał w tabeli miliony użytkowników tongue.gif
Możesz użyć krótszych zapytań (ale kilka), co jednak będziesz musiał zrekompensowac nadłożeniem kodu w php.
mkozak
To co mnie martwi to, to że
1. może istnieć jakieś ograniczenie co do długości zapytania - i w którymś momencie DBMS powie "ja tak nie mogę"
2. czy to nie afektuje na wydajność - generalnie zapytanie powinnowyglądać następująco:
  1. SELECT * FROM users WHERE id IN (SELECT user_id FROM mail WHERE date > 20060500 AND date < 20060600);


Wybieram wszystkie id userów z bazy mail, które między maje, a czerwcem i potem profile userów.

Do tego dochodzi potem filtr np mail like 'xxxx'.

Wszystko jest jak najbardziej czytelne itd, ale... Ja ze względu na czytelność skryptu mam dwie funkcje
- jedna pobiera id ki SELECT user_id FROM mail WHERE date > 20060500 and date < 20060600)
- druga wyświetla i/lub filtruje wyniki pierwszej
nospor
Ad1) to ci napisalem ze ma ograniczenie na dlugosc. poszukaj se tylko jakie bo nie pamietam

ad2)a co to za czytelnosc ze musisz az dwa zapytania walic? nie mozna jednego?
  1. SELECT * FROM users u, mail m WHERE u.id=m.user_id AND m.date > 20060500 AND m.date < 20060600
Aure
1) MySQL na domyślnych ustawieniach ma limit długości ciągu z zapytaniem/zapytaniam ustawiony na 1048576
bajty (1 MB). Szczerze wątpie żebyś kiedykolwiek ten limit przekroczył smile.gif
bigZbig
Co do szybkości interpretacji to liczy sie bardziej nie tyle dlugosc zapytania, co jego zlozonosc. Ilosc zlaczen, podzapytania, operacje matematyczne.
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-2025 Invision Power Services, Inc.