Azure SQL

I am converting some TSQL Code and I have a number of table variable declaration.  They are not performing as well as when they as on a physical device.  I have read some unofficial sites that say that a temp table is the way to go.  Do I have other options?
LVL 1
AlyantoAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Andre BatistaMemberCommented:
Hello Alyanto.

Temp tables is always a great way to speed up query's. Do you have a example of a query you want to improve ?
0
Vitor MontalvãoMSSQL Senior EngineerCommented:
If you share your code with us we would help you better. Maybe the issue isn't only on table variables.
0
AlyantoAuthor Commented:
I cannot share the code however I can describe it.

There is a table variable declared which takes an initial field of the type UNIQUEIDENTIFIER.  Thereafter a lot of updates are run to fully populate the table.  The reason for the many is that there is a lot of outer joins which use COALESCE to determine which is the active link within the ON part of the join.  Breaking it down A little has improved the performace by 70%.  

However having read around there is still some concern that DECLARE %TableName TABLE(...) is considered slower than CREATE TABLE  @TABLENAME (...) which traditionally it has not been when using any CRUD activity.
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

AlyantoAuthor Commented:
Ignore previous slight changes where wrong symbols used.

I cannot share the code however I can describe it.

There is a table variable declared which takes an initial field of the type UNIQUEIDENTIFIER.  Thereafter a lot of updates are run to fully populate the table.  The reason for the many is that there is a lot of outer joins which use COALESCE to determine which is the active link within the ON part of the join.  Breaking it down A little has improved the performace by 70%.  

However having read around there is still some concern that DECLARE @TableName TABLE(...) is considered slower than CREATE TABLE  #TABLENAME (...) which traditionally it has not been when using any CRUD activity.
0
Vitor MontalvãoMSSQL Senior EngineerCommented:
A temporary table allows you to do the same operations you do with regular tables (index, truncate, ...). These kind of operations are not allowed in table variables and perhaps it's because of this that it's common to say that table variables are slower than temporary tables.

My recommendation is to use temporary tables everywhere you can (for example Functions only allows table variables) and create indexes if you are working with large data so you can increase the performance.

If you are working with a small set of data and you won't need to do more operations than a simple select then there's no performance difference between those two options.
0
AlyantoAuthor Commented:
I am not sure this answers my question.  I realise that adding an index is an obvious performance hike but the problem is simply why is there a performance difference and what can I do to resolve it?
0
Vitor MontalvãoMSSQL Senior EngineerCommented:
Better to send you to MSDN article about table variables. These are the interesting parts in the article:
table  variables are not supported in the SQL Server optimizer's cost-based reasoning model. Therefore, they should not be used when cost-based choices are required to achieve an efficient query plan. Temporary tables are preferred when cost-based choices are required. This typically includes queries with joins, parallelism decisions, and index selection choices.
Indexes cannot be created explicitly on table variables, and no statistics are kept on table variables. In some cases, performance may improve by using temporary tables instead, which support indexes and statistics
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
AlyantoAuthor Commented:
Hmmm, I see.  Not terribly impressed with MIcrosoft for producing a limited option with no obvious advantages to its alternative.
0
AlyantoAuthor Commented:
While not an answer I had hoped for it is the right answer.  Thanks for your help
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft SQL Server

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.