PostgreSQL: оптимизация запросов IN (SELECT *)

Всем привет.

Есть у меня такой запросец:

SELECT contributor_user_id,
            device_id_source,
            device_os,
            device_model,
            device_design,
            device_serial,
            device_carrier,
            device_os_version,
            device_manufacturer,
            device_current_app_build,
            device_current_app_version
    FROM all_values
    WHERE all_values.device_id_source :: VARCHAR NOT IN (SELECT device_id_source FROM table WHERE device_id_source IS NOT NULL)
            AND all_values.device_os :: VARCHAR NOT IN (SELECT device_os FROM table WHERE device_os IS NOT NULL)
            AND all_values.device_model :: VARCHAR NOT IN (SELECT device_os FROM table WHERE device_model IS NOT NULL)
            AND all_values.device_design :: VARCHAR NOT IN (SELECT device_os FROM table WHERE device_design IS NOT NULL)
            AND all_values.device_serial :: VARCHAR NOT IN (SELECT device_os FROM table WHERE device_serial IS NOT NULL)
            AND all_values.device_carrier :: VARCHAR NOT IN (SELECT device_os FROM table WHERE device_carrier IS NOT NULL)
            AND all_values.device_os_version :: VARCHAR NOT IN (SELECT device_os FROM table WHERE device_os_version IS NOT NULL)
            AND all_values.device_manufacturer :: VARCHAR NOT IN (SELECT device_os FROM table WHERE device_manufacturer IS NOT NULL)
            AND all_values.device_current_app_build :: VARCHAR NOT IN (SELECT device_os FROM table WHERE device_current_app_build IS NOT NULL)
            AND all_values.device_current_app_version :: VARCHAR NOT IN (SELECT device_os FROM table WHERE device_current_app_version IS NOT NULL)
  )

Писал я его тогда, когда еще знал меньше про оптимизацию, про порядок выполнения SQL-кода, чем сейчас. Сейчас знаю, что JOIN лучше, чем IN. А еще хуже то, что я сколько раз делаю выборку по сути одних и тех же данных и БД для проверки в них наличия.

Но не понимаю как это можно оптимизировать? Научите?

Спасибо.


Ответы (0 шт):