|
I think, with indexes as you have described, that the join approach would be most efficient. Have
you tried both approaches to determine their relative performance? Visual explain could be helpful
in this respect...
I assume by "the same results on Visual Explain" you mean that you got
the identical access plan for each?
This doesn't surprise me. In my "15 second" analysis of the two
statements, they look functionally identical, right down to where nulls
are allowed or not.
If you did, in fact, get identical access plans, that's a pretty good
clue that they are identical.
It would then boil down to whether the optimizer continued to recognize
this (and whether it continues to be true) as you moved from a single
field example to something more complicated. Continuing with Visual
Explain seems like a good way to check it out.
See also:
http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/4f662bf7-0766-4201-a772-dcab5b9a5f08
. . .for an example I googled up that looks a lot like yours.*****************
Note that one of the capabilities of the SQL query engine is the
ability to re-write a statement into an equivilent but better
performing one. For example, converting from embedded selects into
JOINs
Since you say that you saw the same results for both statement in VE,
it's likely that the version with the embedded selects is being
re-written.
Presumably /query rewrite/ reduces both and thus recognizes both, as the /same query/ request for
which both are optimized the same.
If the result set should be small, I would prefer to write the query to be pretty versus**********
efficient :-) In that case, using a UDF for both the /state name/ and the /customer description
with the respective code as the input. Presumably I would have use for those same deterministic
UDFs in other situations, since there should only be one copy of the data against which to correlate
the encoding to its appropriate text string. In that case I would use [while also eliminating A.*
and arranging code fields with its text following]:
SELECT A.cName
, A.sc1, StateName(A.sc1)
, A.sc2, StateName(A.sc2)
, A.cc1, CustDesc(A.cc1)
, A.cc2, CustDesc(A.cc2)
FROM A.Cust
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.