Query question

I have a query like below..
Insert /*+ append */ into sales select * from  temp_sales.

What is /*+ Append */ ? when do you use it?   is it some kind of index hint?
jung1975Asked:
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.

Guy Hengel [angelIII / a3]Billing EngineerCommented:
/*+ APPEND */ is an oracle hint, that tells oracle to add the data above the high water mark, and does not try to find empty space in the already used blocks of the table.
0
Guy Hengel [angelIII / a3]Billing EngineerCommented:
when to use it: usually, when you load lots of rows to the table, ie from another table.
using it will avoid the overhead of trying to fit in few rows each time into places in blocks where rows have been deleted previously in the table.
will not give any performance boost on tables that are empty, or where all blocks are full.
0
MohanKNairCommented:
Append hint can be used to bypass UNDO operations while doing insert
0
Naveen KumarProduction Manager / Application Support ManagerCommented:
just to put it with some sample data:

table1
-------
row1             - existing
row2             - deleted
row3             - deleted ( though row2 and row3 are deleted from table, this space can be reused for inserts but this is an used space )
row4             - existing. This is the last row in the table till now.  So any space beyond this is unused space from here till the allocated space of the object.

if you use this hint /*+ append */, the insert command will start from the unused space after row4 and it will continue...meaning if not sufficient it will consume space from the tablespace.

If this hint is not used, then oracle might try to use the free space ( already used space of row 2 and row 3 ) for the new inserts which we are doing and if the record length of the data which we are inserting is matching with the free space ( already used space of row2 and row3 ).

let us say, deleted records had many fields had null and new inserts have data for all fields and so oracle will just try and free space ( used space ) will not be sufficient and so it proceeds after row4 which is like using /*+ append */ hint.

As angelIII said, for tables which are complete empty ( meaning tables which are already truncated or just got created ) or tables which are completely full ( with no holes in the data blocks ) will not have any impact whether u use this hint or not.

Thanks
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
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
Oracle Database

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.