![]() |
![]() |
![]()
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. |
|
|
![]() |
![]()
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. ![]() -------------------- ![]() 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! |
|
|
![]()
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
Będziesz miał czarno na białym czy korzysta z jakichkolwiek indeksów. -------------------- |
|
|
![]()
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 |
|
|
![]()
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 |
|
|
![]()
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.
|
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 00:08 |