2011-04-19 57 views
0

以下查詢效率不高,我需要使其運行速度更快。查詢檢查太多行,我該如何減少?

id select_type table type possible_keys key key_len ref rows Extra 
1 PRIMARY sob_datas ALL sob_form_id,sob_form_id_2 NULL NULL NULL 365990 Using where 
2 DEPENDENT SUBQUERY sub_sob_datas ALL sob_form_id,sob_form_id_2 NULL NULL NULL 365990 Using where 

如何優化此查詢? sob_field_valuetext字段

我拉字段中每個具有不同值的這些形式。

SELECT 
       sob_datas.id, 
       sob_datas.sob_field_name, 
       sob_datas.sob_field_value 
      FROM sob_datas 
      WHERE sob_form_id = '.$proof['SobForm']['id'].' AND 
      EXISTS(
        SELECT 
         sub_sob_datas.id 
        FROM sob_datas AS sub_sob_datas 
        WHERE sub_sob_datas.sob_form_id = '.$original['SobForm']['id'].' AND 
        sub_sob_datas.sob_field_name = sob_datas.sob_field_name AND 
        sub_sob_datas.sob_field_value != sob_datas.sob_field_value 
      ) 

我還要指出,我打算只更新變化的領域使用新值

回答

2

很難環繞什麼是試圖所以希望在這裏:)做你的頭我明白了這一點,這就是你正在尋找/作品。如果不讓我知道,我會試着弄清楚。

一些測試數據可能會幫助進程(5-10行左右)以及預計從這些行中獲取的內容。但這裏是我的鏡頭:

SELECT 
      sob_datas.id, 
      sob_datas.sob_field_name, 
      sob_datas.sob_field_value 
    FROM sob_datas sd 
     JOIN sob_datas ssd ON sd.sob_field_name = ssd.sob_field_name 
    WHERE sd.sob_form_id = '.$proof['SobForm']['id'].' 
     AND sd.sob_field_value != ssd.sob_datas.sob_field_value 
+0

哈哈,對...很好....談論過於複雜化在我的末端 – Webnet 2011-04-19 19:58:47