|
What you're talking about is called partitioning ( breaking your data into parts ) and it's the horizontal type ( each table has an entire record, and an identical structure, but a row could wind up in any of several tables ) instead of vertical ( where you break the fields in a record up, and have part of the same record in each table, all of them with a different schema ).
SQL Server can do this for you automatically, and it's the recommended way to go if you have more than a few hundred million rows in a table. I get the sense you can see the ways this can be beneficial; if each table has less records, that's less work to find one, or add a new one. Now let's look at some drawbacks.
First, you need to come up with a partition scheme; if you have ten tables instead of one, and somebody wants to add a record, which table does it go into? You have to write a specialized function to answer that, and it gets run before every row is added. Same with finding a row. This overhead can be more than dealing with a clustered index with a ~90 % fill factor.
Plus, maintenance, and changes to fields and indexes can force you to do the same thing to a long list of tables, instead of just one. And if you ever need to query statistics across the board, thing of how awful writing the SQL will be!
I've been in charge of about 235 million rows in a SQL Server table; most queries executed in less than five seconds. It was a dedicated server, and a pretty good one, but it was also a well designed table. Unless you're expecting your system to scale beyond that, or you have thousand-byte char or image fields, I think you'll be better off in the long run with a single table.
|