Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[SQL] Simpelere Query?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben onze zoek functie aan het optimaliseren, maar ik heb wat advies nodig...

table: item

id			name
--------------------------------------
1			iPod
2			Zune
3			Walkman


table: search_item

id_search		id_item
--------------------------------------
1			1
1			2
1			3
2			2
2			3
3			1
3			3


Nu wil ik de items hebben die matchen op id_search 1 and 2 and 3. Daarvoor gebruik ik de volgende SQL query met 3(!) subqueries:

SQL:
1
2
3
4
SELECT * FROM item WHERE id IN
    (SELECT id_item FROM search_item WHERE id_search=1 AND id_item IN 
        (SELECT id_item FROM search_item WHERE id_search=2 AND id_item IN
            (SELECT id_item FROM search_item WHERE id_search=3)));



Deze query geeft de Walkman terug. Maar ik heb het idee dat deze SQL veel efficiënter kan. Misschien met een UNIQUE index op (id_search, id_item)? Wie heeft er een tip?

(Ik gebruik Postgres 8.2)

[ Voor 0% gewijzigd door Verwijderd op 11-09-2007 23:07 . Reden: Foutje... ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
Geen SEA
-> PRG

https://fgheysels.github.io/


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Lees je in over joins voordat je meteen naar subqueries grijpt. :)

{signature}


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:16

gorgi_19

Kruimeltjes zijn weer op :9

SQL:
1
WHERE id_search IN (1,2,3)

wil wellicht ook wel helpen :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
IN doet een OR, en is dus niet helemaal wat de TS wil. :)

Je zou, zoals Voutloos al zegt eens kunnen proberen of het werken met JOINS een performantere query levert, al vraag ik me af of die optimizer niet gewoon met hetzelfde execution plan op de proppen zal komen als met die subqueries.
Als je die joins wilt gebruiken, zal je moeten inner joinen op 3x dezelfde tabel, maar dan moet je een alias gebruiken.

https://fgheysels.github.io/