Partition in Sybase for record insertion & select query

Hi, I am new to Sybase. We need to create Partition in Sybase for record insertion.I am guessing that, we can count number of records & if it exceeds the certain threshold limit, we can rename the current table to something like table_001 & we can create new table with the table name to continue the process of inserting the record. Please advise & correct me on this. Also Once the partition is done, how can we fetch the records using select statement without giving the partition table name? For example, if the record is in table_005, do i need to specify partition name table_005 in select query? Or do i need to give only table name in selectquery(Not Partition name). Does Sybase take care of itself in finding the correct parition where my record exists which is in where clause of the select query? Please give me more insight on this,Thanks in advance,Thanks,ram  
LVL 11
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.

Sybase IQ 12.7 does not support partitioning per se.  It does, however have special support and optimizations in views for combining tables as if they were partitions.

You can do what you want not by renaming the table but by creating your "partition" tables and then layering a view on top.  You probably need at least two views; one for the "current" parition you want to load data into and one that has the UNION of all the partitions.

There are a couple of issues to take into account here.  First, you have to decide why you are splitting up the table.  If you are doing it because your data volumes are very large and you are trying to minimize the load time caused by index reorganization in pass 2, then this technique works great.  For example, you can create a table for each month and keep the most recent 6 months in the Union view.  At the end of the 7th month, you change the view to include the next table and drop the oldest month table from the view.  You can also truncate it to purge old data or keep the table around as an archive of sorts so that you can go back to the old data yet it does not effect the performance of loads and queries on recent data.

If you are expecting it to reduce your query times, you may be dissapointed, particularly if you are running on a smaller machine with just a few CPUs/licenses.  Since the query engine and optimizer have no idea what records are in what tables, you are actually running your query on each one of the underlying tables and then corellating the results.  This can be counter productive unless you can create a view that refers to only some of the paritition tables; say 6 months worth out of two years total in the database.

IQ 15, currently in early beta, does support semantic paritioning.  The question remains as to whether Sybase will do with this feature what they did with it in ASE and charge an additional license fee for it.

Finally, I hope you are not trying to load the tables with Insert statements.  The performance of that technique leaves a lot to be desired given the column store nature of Sybase IQ.  By far the fastest and most flexible way to get data into IQ is with the LOAD TABLE statement.  Depending on what you are doing, it can be anywhere from 10 to 1000 times faster than straight SQL Insert statements.


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
Sybase ASE or IQ ?
Version ?
Joe WoodhousePrincipal ConsultantCommented:
(From the tags this is IQ 12.7)

Bill's already given you the right answer, but there's a bit more still to say.

To answer your specific question,

> Does Sybase take care of itself in finding the correct parition where my record exists which is in where clause of the select query?

If you:

1) create a view containing one or more UNIONs of SELECTs of your underlying tables
2) use the view in your queries

then yes. Simply referring to the tables won't help you.

However you haven't said enough here that makes me think you even need to do this. "Record insertion" doesn't justify UNION in VIEW. (As Bill says you don't really have partitions on the tables in IQ yet.)

Another gotcha - you *really* need PRIMARY KEYs on the PKs of the underlying tables. Simply creating a unique HG index isn't enough (even though a PRIMARY KEY is implemented as a unique HG) because PK clauses give the optimiser more information. If the PKs are composite (multiple columns), create a PRIMARY KEY clause on the composite key, but also create HG indexes (regardless of cardinality) on each of the columns in the PK.
Cloud Class® Course: C++ 11 Fundamentals

This course will introduce you to C++ 11 and teach you about syntax fundamentals.

If you're asking about IQ partitioning with the goal getting more I/O parallelism, also take a look at the IQ DISK_STRIPING option (which is on by default).   This option causes IQ to automatically spread I/O across multiple db spaces.  See:

This isn't as nice as partitioning (eg., you can't partition data by date range), but it's helps performance is you have multiple disk controllers and disks.

(I saw the tags, but from the questions and approach, this may be ASE.  Why bother with that kind of partitioning in IQ, renaming tables, how to get at the data in the old table ...)

I think the simple answer is:
1  Do nothing.  The software (ASE or IQ) will continue working as is.
2  Read the manuals
3  Get clear about what you actually need to do
4  If you are uncertain about HOW to do that, post a question.


Joe WoodhousePrincipal ConsultantCommented:
Hmm, don't agree. The question as asked was answered completely and correctly.

grant300 answered the question and should receive the points.
If you are going to award point, I suggest a 50/50 point split with Joe Woodhouse.
Joe WoodhousePrincipal ConsultantCommented:
On a 60-point question I don't think they can split, 50 minimum per contributing answer. And if there can be only one answer, then it's yours. Mine added to yours but would not have stood on its own.
I did not even look at the number of points assigned to the question.  Sorry if I made it more complicated than it needed to be.

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
Sybase 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.