Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja zapytania, Przykładowy wzorzec dla mnie
endryu87
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 18.03.2009

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


Kiedyś trzeba zarejestrować się na forum języka, który stanowi moją poniekąd pracę;)

A teraz do tematu: Czysto teoretycznie - chciałbym liznąć "przykładowej" optymalizacji zapytania sql'owego:

Zapytanie ma treść:

Kod
SELECT id_news, title_, content_, photo_, date_ FROM db_news AS t1 LEFT JOIN db_news_cat AS t2 ON t2.id_news_cat WHERE t1.id_news_cat=t2.id_news_cat AND t2.various_='$page' AND id_news='$id' AND published_=1 LIMIT 1


Generalnie: pobieram wartości z tabeli z rekordami dotyczącymi newsów, artykułów (...nieważne zresztą). Jednocześnie sprawdzam zależność, czy przekazane parametry dotyczące id oraz działu (various_). Jeśli bezpośrednio nastąpi zmiana w adresie i id rekordu będzie odwoływało się do treści należącej do innego artykułu - rekord oczywiście nie zostanie wyświetlony - jako że nie ten dział.

Myślę, że w miarę składnie wytłumaczone - i teraz pytanie z początku: czy takie zapytanie da się jakkolwiek skrócić (zoptymalizować?).

Dziękuję za pouczenie i pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
czy takie zapytanie da się jakkolwiek skrócić (zoptymalizować?).

To nie są określenia synonimiczne. Dłuższe zapytanie (w zapisie) wcale nie oznacza, że jest nieoptymalne. A z tego, co widze, to jest ok pod warunkiem, że masz pozakładane odpowiednie indeksy w bazie. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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%)
-----


Daj sobie EXPLAIN'a

  1. EXPLAIN SELECT * FROM tabela


Będziesz miał czarno na białym czy korzysta z jakichkolwiek indeksów.


--------------------
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Każde pole możesz umieścić w ` `
np. `id`

A czemu? Bo tak jest szybciej. (np. Postgresql nie ma `)


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Zyx
post
Post #5





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Odwrócone apostrofy to nie są żadne magiczne przyspieszacze, tylko informacja dla parsera, żeby przypadkiem nie zinterpretował nazwy pola jako słowa kluczowego. PostgreSQL w tej roli używa cudzysłowów. Natomiast czy to działa szybciej - może, ale nie musi. Należy zapytać twórców parsera.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #6





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Wydaję mi się, że jednak będzie szybciej - bo parser nie musi sprawdzać czy aby to słowo nie jest kluczem.
Go to the top of the page
+Quote Post
Kocurro
post
Post #7





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Zmiana na szybko:

Kod
SELECT `t1`.`id_news`, `t1`.`title_`, `t1`.`content_`, `t1`.`photo_`, `t1`.`date_` FROM `db_news` AS `t1` LEFT JOIN `db_news_cat AS `t2` ON `t1`.`id_news_cat`=`t2`.`id_news_cat` WHERE `t2`.`various_`='$page' AND `t1`.`id_news`='$id' AND `t1`.`published_`=1 LIMIT 1;


Ale przede wszystkim używaj EXPLAINA i kombinuj, niestety różne wersje bazy różnie parsują i może się okazać, że konstrukcja która na jednej wersji jest wolniejsza na innej jest szybsza.

pozdr.
Łukasz
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 Aktualny czas: 21.08.2025 - 00:08