Там действительно нет способа ответить на этот вопрос.Вы думаете об этом неправильно.SQL-запрос не является инструкцией к базе данных о , как получить желаемый набор результатов, вместо этого это описание нужных вам данных.Как получить это до базы данных.
Oracle перепишет ваш запрос в план выполнения.Он будет искать наиболее эффективный план, основываясь на ваших таблицах, индексах, ограничениях, статистике, которую он собирает, и даже догадывается, что он делает, основываясь на данных.На самом деле, вполне возможно, что вы можете написать этот запрос с объединением и подзапросом, и это приведет к точно такому же плану выполнения и той же производительности.
Я предлагаю написать запрос так, чтобы его было легкочтобы понять, что происходит.Только если производительность действительно плохая, вы должны беспокоиться о том, что она делает.Oracle довольно умен и может найти путь к вашим данным, который окажется лучше, чем вы думали.
То, что у вас есть, хорошо, и, вероятно, запрос, который я сам напишу, для начала.У вас есть не только подзапрос, но и скалярный подзапрос , который, черт побери, намного лучше возвращает ровно одну или ноль строк.Поэтому, если ваш fieldXValue
не уникален в таблице, вы получите исключение.
Скалярные подзапросы, как правило, очень удобны в использовании.Они кэшируются, поэтому запрос, вероятно, будет выполнен только один раз, даже если в вашем наборе результатов будет миллион строк.Я бы порекомендовал эту статью (наряду со всем остальным, что когда-либо писал Том Кайт): О кэшировании и евангелизации SQL