<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Jak to zoptymalizować???]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=448&amp;type=atom"/>
	<updated>2010-06-22T14:55:33Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=448</id>
		<entry>
			<title type="html"><![CDATA[Odp: Jak to zoptymalizować???]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2107#p2107"/>
			<content type="html"><![CDATA[No ale w tym co podałeś nie ma NOT IN tylko IN, więc wciąż nie wiem w czym problem.
Może podaj to zapytanie tak jak ono wygląda w oryginale.]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-06-22T14:55:33Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2107#p2107</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Jak to zoptymalizować???]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2104#p2104"/>
			<content type="html"><![CDATA[z tego co sobie przypominam to chyba chodziło o to że nie mogłem uzyskać warunku złączenia typy zawiera się w jednej tabeli ale nie ma w innej czyli 
[code]
tabela1.kolumna2 NOT IN (SELECT tabela4.kolumna1
                           FROM schemat2.tabela4
                           WHERE kolumna1 = 1)
[/code]

dla takiego zapisu
[code]
tabela1.kolumna2=1
[/code]
musiałoby być 
[code]
tabela1.kolumna2<>1
[/code]
a to chyba nie przejdzie...]]></content>
			<author>
				<name><![CDATA[WitekS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=760</uri>
			</author>
			<updated>2010-06-22T08:20:10Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2104#p2104</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Jak to zoptymalizować???]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2073#p2073"/>
			<content type="html"><![CDATA[Ale zgodzisz sie ze ten warunek
[quote]
tabela1.kolumna2 IN (SELECT tabela4.kolumna1
                        FROM schemat2.tabela4
                        WHERE kolumna1 = 1)
[/quote]
to to samo co 
[code]
tabela1.kolumna2=1
[/code]?
Może przypomnisz sobie na czym polegał ten problem z '=' bo jakoś nic mi nie przychodzi do głowy.
A zamiana tego IN na = by prawdopodobnie ładnie przyspieszyło to zapytanie.]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-06-12T20:09:14Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2073#p2073</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Jak to zoptymalizować???]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2070#p2070"/>
			<content type="html"><![CDATA[Dzięki za podpowiedź to niestety jest tylko mały fragment całości. Z tego co zauważyłem to problem pojawia się gdy podzapytania typu 
[code]tabela1.kolumna2 IN (SELECT tabela4.kolumna1
                        FROM schemat2.tabela4
                        WHERE kolumna1 = 1)[/code]  
zwracają dużą ilość danych (ale to chyba oczywiste). Już teraz nie pamiętam dokładniej przyczyny ale właśnie porównania typu [code]tabela1.kolumna2=1[/code] nie dawały oczekiwanych rezultatów dlatego stosuję takie jak wyżej.
Doraźnie zmieniłem na przeciwną logikę czyli  coś takiego  [code]tabelaX.kolumnaY NOT IN (SELECT tabelaZ.kolumna itd.)[/code] gdzie wyników z tego select'a jest mniej.]]></content>
			<author>
				<name><![CDATA[WitekS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=760</uri>
			</author>
			<updated>2010-06-08T16:57:33Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2070#p2070</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Jak to zoptymalizować???]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2069#p2069"/>
			<content type="html"><![CDATA[tak na szybko na początek
[quote]
tabela1.kolumna2 IN (SELECT tabela4.kolumna1
                        FROM schemat2.tabela4
                        WHERE kolumna1 = 1) 
[/quote]
tu chyba wystarczy dac 
[code]
tabela1.kolumna2=1
[/code]

[quote]
 tabela1.kolumna2 IN (SELECT DISTINCT tabela5.komumna1
                                              FROM  schemat2.tabela5,
                                                         schemat2.tabela6
                                              WHERE
                                                         tabela4.kolumna3 IN (SELECT tabela3.kolumna2 
                                                                                            FROM schemat2.tabela3) AND
                                                                                            kolumna2 = 1);
[/quote]
Tu bym wywalił distinct, przy in jest zbedny.
Poza tym chyba jest kartezjan na tabelach tabela5 i tabela6 bo ich nie łączysz nigdzie.]]></content>
			<author>
				<name><![CDATA[rski]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=26</uri>
			</author>
			<updated>2010-06-08T07:06:41Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2069#p2069</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Jak to zoptymalizować???]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=2067#p2067"/>
			<content type="html"><![CDATA[Witam
Mam takie zapytanie i do czasu jak była mała liczba danych było ok jednak teraz wykonuje się bardzo długo i chciałbym to jakiś zoptymalizować. Dla uproszczenia posłużę się symbolicznymi nazwami:
[code]

SELECT
      tabela1.kolumna1,
      tabela2.kolumna1, 
      tabela2.kolumna2,
      tabela2.kolumna3,
      tabela3.kolumna1
FROM 
      schemat1.tabela1,
      schemat2.tabela2,
      schemat3.tabela3
WHERE 
    date(tabela1.kolumna1) >= '2010-06-04' AND
    date(tabela1.kolumna1) <= '2010-06-09' AND
        tabela3.kolumna2 = tabela2.kolumna2 AND
        tabela1.kolumna2 = tabela2.kolumna4 AND
        tabela1.kolumna2 IN (SELECT tabela4.kolumna1
                        FROM schemat2.tabela4
                        WHERE kolumna1 = 1) OR
        tabela1.kolumna2 IN (SELECT DISTINCT tabela5.komumna1
                                              FROM  schemat2.tabela5,
                                                         schemat2.tabela6
                                              WHERE
                                                         tabela4.kolumna3 IN (SELECT tabela3.kolumna2 
                                                                                            FROM schemat2.tabela3) AND
                                                                                            kolumna2 = 1);

[/code]

Wygląda to na zagmatwane ale nie mam pomysłu jak to uprościć.
Po za tym przydałoby się chyba po indeksować niektóre tabele tylko czy to coś przyspieszy?
A może jakieś ustawienia w pliku konfiguracyjnym coś przyspieszą?]]></content>
			<author>
				<name><![CDATA[WitekS]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=760</uri>
			</author>
			<updated>2010-06-07T19:51:21Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=2067#p2067</id>
		</entry>
</feed>
