This question is related to another:
Will multiple filegroups speed up my database?
The software that we are developing is an analytical tool that uses MS SQL Server 2005 to store relational data. Initial analysis may be slow (since we process millions or billions of rows of data), but there are performance requirements for quickly recalling previous analyzes, so we “save” the results of each analysis.
Our current approach is to save the results of the analysis in a series of "execution-specific" tables, and the analysis is quite complicated, and we can get up to 100 tables for analysis. Typically, these tables are used for analysis for a couple of hundred MB (which is small compared to our hundreds of GB or sometimes several TB of source data). But overall, disk space is not a problem for us. Each set of tables refers to one analysis, and in many cases this gives us tremendous performance improvements over the original data.
The approach begins to break down as soon as we accumulate enough saved analysis results - before we added more reliable archiving / cleaning capabilities, our test database reached several million tables. But we do not need to have more than 100,000 tables, even in production. Microsoft sets a rather huge theoretical limit on sysobjects (~ 2 billion), but as soon as our database grows above 100,000 or so, simple queries like CREATE TABLE and DROP TABLE can drop dramatically.
We have a place to discuss our approach, but I think it can be difficult to do without a larger context, so instead I want to ask a more general question: if we are forced to create so many tables, then what is the best approach to manage them ? Multiple filegroups? Multiple schemes / owners? Multiple Databases?
One more note: I’m not enthusiastic about the idea of “just throwing hardware at a problem” (that is, adding RAM, processor power, disk speed). But we will not exclude this, especially if (for example) someone can tell us what the effect of adding RAM or using several filegroups will have to manage a large system directory.