Если я выполнить запрос напримерMysql оптимизации подзапросов в пункте, где
SELECT *
FROM `table1`
WHERE 1 OR EXISTS (
SELECT show
FROM `table2`
WHERE id IN(1,2,3)
)
Я ожидал бы оптимизатору, чтобы понять, что где положение ВСЕГДА решает верно, и что поэтому нет необходимости запускать подзапрос. Поскольку выполнение запроса с помощью EXPLAIN показывает, что это не так, и подзапрос выполняется в любом случае. Это сужен пример более сложной проблемы, где я судимое выполнять различные подзапросов базы на значении столбца внешнего запроса, как:
SELECT value FROM table t
LEFT JOIN...
WHERE
(SELECT
IF(t.value = 1,
(SELECT ...),
(SELECT ...)
)
)
The интенсионала было то, что только один из колб подзапросов в ГДЕ условие выполняется, но то же самое происходит здесь, оба выполняются, но используется только одно значение. Таким образом, результат правильный, но запускаются бесполезные запросы. Я попробовал CASE WHEN, а также такую же проблему. Не уверен, что это потому, что я использую MariaDB или что-то, что мне здесь не хватает.
Пожалуйста, укажите номер версии MariaDB, которые вы используете. И, пожалуйста, предоставьте 'EXPLAIN SELECT ...'. –
Аналогичный запрос не может «закоротить» в 5.6.22. –
Ditto for 5.7.15, 8.0.0 и MariaDB 10.2.2. –