我在嘗試優化查詢。表中有三種不同的查詢,我認爲這不是必需的。在SQL查詢中使用「AND」和「OR」
這是我想要優化的原始查詢。
SELECT DISTINCT(productid) FROM q_products
WHERE visibility=1 and status=0 AND productid IN (productidList)
UNION ALL
SELECT DISTINCT(q_products.productid) FROM q_products,q_product_apply_access
WHERE q_products.productid=q_product_apply_access.productid
AND q_product_apply_access.partnerid='partnerid'
AND q_product_apply_access.apply_status=0
AND q_products.visibility=3 AND q_products.status=0
AND q_products.productid IN (productidList)
UNION ALL
SELECT DISTINCT(q_products.productid) FROM q_products,q_product_aff_access
WHERE q_products.productid=q_product_aff_access.productid
AND q_product_aff_access.accid='accountid'
AND q_products.visibility=2 AND q_products.status=0
AND q_products.productid IN (productidList)
讓我帶大家通過這個查詢,
1)我從q_products
具有visibility=1
和status=0
並選擇不同的productid
也是productidList
2)我現在選擇不同productid
從q_products
和檢查是否productid
是否存在於另一個表q_product_apply_access
,如果是,然後檢查q_product_apply_access.partnerid
是否與給予我們一樣如果q_product_apply_access.apply_status
爲0,然後再次檢查那些productid
是否在productidList
。
3)它做了類似的事情,最後再檢查是否productid
s在productidList
。
我的想法,以優化是是做下列方式 - >
1)選擇所有productids
從q_products
這是在我的productidList。
2)檢查這些productids
是否在表q_product_apply_access
和q_product_aff_access
中,如果是,則滿足其後續條件。 3)當這一切都完成後,我檢查哪些人有q_products.visibility IN (1,2,3)
和q_products.status=0
。
我認爲這樣我可以最小化表中的查找,並且我的查詢將在productidList的最小子集中查詢,該子集可能只包含20-30行。
這是我的代碼,但我沒有得到正確的答案。誰能告訴我我該怎麼做?或者我應該如何在這裏應用嵌套循環?
SELECT DISTINCT(productid)
FROM q_products as oc,
q_product_apply_access as ocaa,
q_product_aff_access as ocfa
WHERE productid IN (productidList)
AND (
(oc.productid=ocaa.productid
AND ocaa.affiliateid='partnerid'
AND ocaa.apply_status=0)
OR
(oc.productid=ocfa.productid
AND ocfa.accid='accountid')
)
and status=0
AND visibility IN (1,2,3)
當你說「沒有得到正確答案」時,我假設你的意思是結果不一樣? – brazilianldsjaguar
yup!究竟!加上表格花費更多的時間來查找。 –
所以,如果一個產品的'visibility = 1'是你想要的,不管它在其他表中存在。如果其'visibility = 2',那麼只有在'q_product_aff_access'表中也是如此(不管它是否在另一箇中),並且如果'visibility = 3',那麼你只需要它如果它在'q_product_apply_access'表中還存在。聽起來正確嗎? – brazilianldsjaguar