Я понимаю, что это значительный запрос, и, очевидно, многое происходит. Со второй по последнюю строку этого запроса сравниваются MD5-хэши полей text
. Я попробовал это вместо сравнения значений, но это совсем не уменьшило время выполнения запроса.
Поля в sob_datas
могут быть связаны друг с другом через sob_datas_to_links
, и этот запрос сравнивает значения для 2 форм (каждая имеет 517 строк в sob_datas
) и извлекает связанные, которые делают не разделяйте одинаковые значения.
SELECT
sob_datas.id,
sob_datas.sob_field_name
FROM sob_datas
WHERE sob_form_id = '.$formId.' AND
EXISTS(SELECT
sob_datas_to_links.id
FROM sob_datas_to_links
INNER JOIN sob_datas AS sub_sob_datas ON
sub_sob_datas.id = sob_datas_to_links.sob_datas_id
INNER JOIN sob_forms ON (
sob_forms.id = sub_sob_datas.sob_form_id AND
sob_forms.is_proof = 0 AND
sob_forms.archived IS NULL
)
WHERE sob_datas_to_links.link_id = (
SELECT
link_id
FROM sob_datas_to_links AS sub_sob_datas_to_links
WHERE sub_sob_datas_to_links.sob_datas_id = sob_datas.id
) AND
sub_sob_datas.sob_field_name = sob_datas.sob_field_name AND
sub_sob_datas.hash != sob_datas.hash
)
.
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY sob_datas ref sob_form_id,sob_form_id_2 sob_form_id [BINARY - 1B] const 563 Using where
2 DEPENDENT SUBQUERY sob_forms ALL PRIMARY NULL NULL NULL 937 Using where
2 DEPENDENT SUBQUERY sub_sob_datas ref PRIMARY,sob_form_id,sob_form_id_2 sob_form_id [BINARY - 3B] summaries_dev.sob_forms.id,summaries_dev.sob_datas... 1 Using where
2 DEPENDENT SUBQUERY sob_datas_to_links ref sob_datas_id sob_datas_id [BINARY - 1B] summaries_dev.sub_sob_datas.id 1 Using where
3 DEPENDENT SUBQUERY sub_sob_datas_to_links ref sob_datas_id sob_datas_id [BINARY - 1B] summaries_dev.sob_datas.id 1 Using where