#php #mysql #query-optimization
#php #mysql #оптимизация запроса
Вопрос:
Следующий запрос неэффективен, и мне нужно заставить его выполняться намного быстрее.
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_value
это text
поле
Я извлекаю поля в каждой из этих форм, которые имеют разные значения.
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
)
Я также должен отметить, что я собираюсь обновить только измененные поля новыми значениями
Ответ №1:
Трудно понять, что здесь пытаются сделать 🙂 Итак, надеюсь, я уловил суть, и это то, что вы ищете / работает. Если нет, дайте мне знать, и я попытаюсь разобраться.
Немного тестовых данных может помочь процессу (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