I want to know the difference of those operators, mainly their performance difference.
I have had a look at Difference between <> and != in SQL, it has no performance related information.
Then I found this on dba-oracle.com,
it suggests that in 10.2 onwards the performance can be quite different.
I wonder why? does != always perform better then <>?
NOTE: Our tests, and performance on the live system shows, changing from <> to != has a big impact on the time the queries return in. I am here to ask WHY this is happening, not whether they are same or not. I know semantically they are, but in reality they are different.
I have tested the performance of the different syntax for the not equal operator in Oracle. I have tried to eliminate all outside influence to the test.
I am using an 11.2.0.3 database. No other sessions are connected and the database was restarted before commencing the tests.
A schema was created with a single table and a sequence for the primary key
The table was indexed to improve the performance of the query.
Ten million rows were added to the table using the sequence,
SYSDATEfor the timestamp and random data via DBMS_RANDOM (A-Z) and (0-99) for the other two fields.The schema was analysed to provide good statistics.
The three simple queries are:-
These are exactly the same with the exception of the syntax for the not equals operator (not just <> and != but also ^= )
First each query is run without collecting the result in order to eliminate the effect of caching.
Next timing and autotrace were switched on to gather both the actual run time of the query and the execution plan.
Now the queries are run in turn. First up is <>
Next !=
Lastly ^=
The execution plan for the three queries is identical and the timings 2.12, 2.13 and 2.10 seconds.
It should be noted that whichever syntax is used in the query the execution plan always displays <>
The tests were repeated ten times for each operator syntax. These are the timings:-
Whilst there is some variance of a few hundredths of the second it is not significant. The results for each of the three syntax choices are the same.
The syntax choices are parsed, optimised and are returned with the same effort in the same time. There is therefore no perceivable benefit from using one over another in this test.
“Ah BC”, you say, “in my tests I believe there is a real difference and you can not prove it otherwise”.
Yes, I say, that is perfectly true. You have not shown your tests, query, data or results. So I have nothing to say about your results. I have shown that, with all other things being equal, it doesn’t matter which syntax you use.
“So why do I see that one is better in my tests?”
Good question. There a several possibilities:-
other workload, caching etc You have given no information about
which we can make an informed decision)
I have shown via a documented and repeatable process that there is no benefit to using one syntax over another. I believe that <> != and ^= are synonymous.
If you believe otherwise fine, so
a) show a documented example that I can try myself
and
b) use the syntax which you think is best. If I am correct and there is no difference it won’t matter. If you are correct then cool, you have an improvement for very little work.
“But Burleson said it was better and I trust him more than you, Faroult, Lewis, Kyte and all those other bums.”
Did he say it was better? I don’t think so. He didn’t provide any definitive example, test or result but only linked to someone saying that != was better and then quoted some of their post.
Show don’t tell.