A table in Sybase has a unique varchar(32) column, and a few other columns. It is indexed on this column too.
At regular intervals, I need to truncate it, and repopulate it with fresh data from other tables.
insert into MyTable
select list_of_columns
from OtherTable
where some_simple_conditions
order by MyUniqueId
If we are dealing with a few thousand rows, would it help speed up the insert if we have the order by clause for the select? If so, would this gain in time compensate for the extra time needed to order the select query?
I could try this out, but currently my data set is small and the results don’t say much.
With only a few thousand rows, you’re not likely to see much difference even if it is a little faster. If you anticipate approaching 10,000 rows or so, that’s when you’ll probably start seeing a noticeable difference — try creating a large test data set and doing a benchmark to see if it helps.
Since you’re truncating, though, deleting and recreating the index should be faster than inserting into a table with an existing index. Again, for a relatively small table, it shouldn’t matter — if everything can fit comfortably in the amount of RAM you have available, then it’s going to be pretty quick.
One other thought — depending on how Sybase does its indexing, passing a sorted list could slow it down. Try benchmarking against an ORDER BY RANDOM() to see if this is the case.