2014-09-04 121 views
-2

我正面臨着關於SQL性能的大問題。任何人可以幫助我在這裏解決這個問題是我的問題MySQL大數據表性能問題

在Product_model表我有133063450記錄和product_data表我有43,34,550記錄

我寫這篇文章的查詢

選擇PRODUCT_NAME從product_data其中autoopartoo_id IN ( 選擇autoopartoo_id FROM product_model其中使= '依維柯' & &模型=「DAILY我& &引擎= '柴油機' & & start_yr = '1992' 的)& &的classid = 216極限20

但此查詢太多時間來加載數據。

請幫我解決這個問題。

謝謝。

回答

1

這是您的查詢,用更標準的SQL語法編寫:

Select Product_Name 
from product_data 
where autoopartoo_id IN (SELECT autoopartoo_id 
         FROM product_model 
         where make = 'IVECO' AND model = 'DAILY I' AND 
           engine = 'Diesel' AND start_yr = '1992' 
         ) and 
     classid = 216 
limit 20; 

來提高性能的最佳方式是使用索引。我建議以下兩種:

product_data(classid, autoopartoo_id, Product_Name) 
product_model(make, model, anging, start_yr, autoopartoo_id) 

有可能是你可以採取其他步驟,但你不提數據庫和特定的軟件是優化的重要。

+0

嗨,我使用php和MYQL,我已經把索引放在上面的字段中.. – 2014-09-05 18:54:24

0

您可能需要查看索引您的表。 我不是mysql專家,但是你應該在你選擇的2個表上放置一個非聚集索引。
Mssql有一個性能調節器,您可以運行查詢,它會爲您生成索引語句。我會說mysql會有類似的東西。

+0

我們可以使用連接來獲得更好的性能嗎? – 2014-09-05 20:24:48

+0

「在大多數情況下,JOIN比子查詢更快,子查詢速度更快是非常罕見的。 在JOIN中,RDBMS可以創建一個對您的查詢更好的執行計劃,並且可以預測應該加載哪些數據與子查詢不同,它將運行所有查詢並加載其所有數據來執行處理。 子查詢中的好處是它們比JOIN更具可讀性:這就是爲什麼大多數情況下新的SQL人員更喜歡他們;這是簡單的方法;但就性能而言,JOINS在大多數情況下都更好,即使他們不太難以閱讀。「 – user631618 2014-09-06 01:41:49

+0

Hi從product_data中選擇產品名稱,其中autoopartoo_id IN(SELECT autoopartoo_id FROM product_model where make ='IVECO'&& model ='DAILY I'&& engine ='Diesel'&& start_yr ='1992')&& classid = 216 limit 20我必須加入哪個連接用於更快地查詢查詢,並且將索引放在上面的所有字段 – 2014-09-06 10:45:09