Ben bezig met een database met woorden welke gekoppeld zijn aan een item.
Met de volgende query kan ik zoeken op een woord en eveneens de overige woorden vinden die in hetzelfde 'item' voorkomen.
Het nounID 69 representeert een bepaald woord, de omspannende query vindt de overige woorden die in dezelfde items voorkomen als waarin woord 69 voorkomt.
Het is relatief eenvoudig om dit op te lossen met een subquery, de performance is alleen erg traag. Een query duurt gem. 4 seconden op een DB van 20k nouns. Daar komt nog bij dat ik nu alleen nog maar zoek op woord 69.
Hebben jullie een idee hoe ik de performance van deze query kan vergroten? De table is voorzien van indexen.
Met de volgende query kan ik zoeken op een woord en eveneens de overige woorden vinden die in hetzelfde 'item' voorkomen.
Het nounID 69 representeert een bepaald woord, de omspannende query vindt de overige woorden die in dezelfde items voorkomen als waarin woord 69 voorkomt.
Het is relatief eenvoudig om dit op te lossen met een subquery, de performance is alleen erg traag. Een query duurt gem. 4 seconden op een DB van 20k nouns. Daar komt nog bij dat ik nu alleen nog maar zoek op woord 69.
Hebben jullie een idee hoe ik de performance van deze query kan vergroten? De table is voorzien van indexen.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
| select i_n2.nounID, count(i_n2.nounID) as cnt from itemnouns i_n2 left join nouns n2 on n2.nounID = i_n2.nounID where n2.navigatable = 0 and i_n2.itemID in ( select i.itemID from items i left join itemnouns i_n on i_n.itemID = i.itemID left join nouns n on i_n.nounID = n.nounID where i_n.nounID=69 ) group by nounID |
[ Voor 0% gewijzigd door een moderator op 24-05-2008 17:35 . Reden: highlighting aangezet ]
| To acknowledge what is known as known and what is not known as known is knowledge. |