Tänkte tipsa om att istället för att använda en subquery, att du använder LEFT OUTER JOIN för att optimera. I ditt fall kommer detta bli någonting i stil med:
Kod:
SELECT DISTINCT `products`.`product_id` , `products`.`product_name`
FROM `products`
LEFT OUTER JOIN `orders` ON
`orders`.`product_id` = `products`.`product_id`
AND `orders`.`user_id` = 1
WHERE `orders`.`user_id` IS NULL
Detta är effektivare då du slipper ha en subquery som körs för varje selectad rad.
Finns lite förklaring på
http://searchoracle.techtarget.com/a...XISTS-subquery