2015-12-17 20 views
0

我對mysql比較新,所以我希望你能指出我的方向。我有兩張表,'產品'是關於我們要銷售的產品的信息,'產品'表是來自我們銷售該產品的不同供應商的定價和供應商信息。兩個表都有相關的'sku'列。 'offer'表中可以有多個供應商銷售相同的sku。MySQL在WHERE語句中使用SELECT - 最佳方式?

當我查詢產品表中的各種東西時,我只想要一個供應商從'offer'表中銷售它的結果。現在我使用的查詢關鍵詞,比如:

SELECT * 
FROM products 
WHERE 
products.sku IN (SELECT offers.sku FROM offers) 
AND 
products.name = 'Iphone' 
AND 
blah..... 

這可能需要更長的時間比我要在具有許多結果的查詢。有沒有更有效的方法來查詢這兩個表?也許用JOIN?謝謝。

+1

將其轉換爲JOIN語法可能會具有與優化程序通常非常智能相同的性能。謂詞中的數據類型和索引是什麼? 'products.sku','products.name'等。 – Matthew

+0

products.sku是主鍵,因此它有自己的索引,而offers.sku也有它自己的索引。數據類型都是CHAR(12),因爲我們所有的skus都是12個字符長。 –

+0

您可以忽略查詢中的'sku'謂詞以驗證它實際上是導致性能問題的原因嗎? – Matthew

回答

0

EXISTSJOIN可以比IN更高性能,但這不能保證您的優化器不會將以下內容視爲與您的查詢相同。

SELECT * 
FROM products 
WHERE EXISTS (SELECT 1 
       FROM offers 
       WHERE products.sku = offers.sku) 
AND  products.name = 'Iphone' 
AND blah..... 

索引sku和過濾標準使用等領域可能是在性能上的大收穫,你要尋找的。

+0

這使性能變差了 –

+0

@TimM你是否比較了'EXISTS'版本與緩存結果?這可能是您的瓶頸是其他過濾標準,但是「EXISTS」應該與「IN」相同或更好。 –

+0

我有查詢緩存關閉,所以我假設什麼都沒有被緩存在任何地方。但是使用存在使查詢從約.5秒變爲約2秒。 –