я написал ниже запрос, который имеет много «и» операторов, я хотел бы знать, как оптимизировать производительность ниже запроса [я могу удалить некоторые из «и» Операторов]ORACLE QUERY - ОПТИМИЗАЦИЯ
SELECT I.date,
K.somcolumn,
L.somcolumn,
D.somcolumn
FROM Table1 I,
Table2 K,
Table3 L,
Table4 D
WHERE I._ID = K._ID
AND K.ID = L._ID
AND L._ID = I._ID
AND I._CODE = L._CODE
AND K.ID = D._ID(+)
AND L._ID IN (SELECT _id
FROM I
WHERE UPPER (someflag) = 'TRUE'
GROUP BY _id
HAVING COUNT (*) > 1)
AND L._ID IN (SELECT _id
FROM I
WHERE UPPER (code) = 'OPEN'
GROUP BY _id
HAVING COUNT (*) > 1)
ORDER BY I._ID, I._CODE;
Если возвращено несколько строк, вы можете попробовать сделать счет из таблицы I в качестве нового возвращаемого столбца, используя скалярный подзапрос. Вы также можете попробовать использовать предложение WITH, создавая временную таблицу из таблицы I. Только идеи. Я не могу дать ответ, поскольку не могу подтвердить свои идеи. – user2672165
Также он может быть значительно быстрее, используя 'EXISTS', чем' IN', поскольку индекс может использоваться. 'EXISTS (SELECT NULL FROM I WHERE L._id = _id AND UPPER (code) = 'OPEN' GROUP BY _ID HAVING COUNT (*)> 1)'. Поскольку индекс может использоваться для кода _id, а someflag - это, возможно, кандидаты для индекса растрового изображения. – user2672165