查询检查行太多,我该如何减少


Query checking too many rows, how can I reduce?

下面的查询效率不高,我需要使它运行得更快。

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
            )

我还应该指出,我只会用新值更新已更改的字段

很难把你的头围绕着什么是试图在这里做:)所以希望我抓住了这一点,这就是你正在寻找/作品。如果没有,请告诉我,我会设法解决的。

一些测试数据可以帮助处理(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