Q:

Performance Queries on a SQL table that has 200 million rows in it?

I have a table that has 200 million rows and it will increase by 1.5 million every day. 
I need to query on it to fetch the data for a period say like 3 months data, which is taking atleast half an hour time to retrieve it. 
Is there any way of performance fine tuning the table or query to execute and get the data much faster in less than a minute or 2.
CREATE TABLE [dbo].[Chnl](
    [Id] int IDENTITY(1,1) NOT NULL 
        CONSTRAINT [PK_Chnl] PRIMARY KEY CLUSTERED
    ,[ChnlNo] int NOT NULL
    ,[ChnlName] varchar(50) NULL
    ,[Active] bit NULL
)

CREATE TABLE [dbo].[ChnlData]( 
    [Id] [int] IDENTITY(1,1) NOT NULL
        CONSTRAINT [PK_ChnlData] PRIMARY KEY CLUSTERED
    ,[ChnlId] [int] NOT NULL
    ,[ChnlValue] [decimal](6, 2) NOT NULL
    ,[ChnlDataLogTime] [datetime] NOT NULL
    ,[Comments] [varchar](max) NULL
    ,[Active] [bit] NULL
    ,CONSTRAINT [FK_ChannelData_Channel] FOREIGN KEY([ChnlId]) REFERENCES [dbo].[Chnl] ([Id]) 
)

Its just a simple query: 
SELECT * 
FROM [ChnlData]
WHERE  ChnlId in (519, 520)

It fetches 7 million records and it took 9 minutes to get that. Right now the DB size is 32 Gigabytes

A:

Partitioning your table (year or month based) will be one of the possible solutions. You may have to create scripts for dynamic partitions.
You may implement DataWarehousing style of solutions in addition to the previous approach.
Like you may create a surrogate key(Unique key - may be a sequence) for evry record, and prepare a look up table like structure.
Ex: Keys 1234M - 1235M set of keys will be in XX Partition.. etc.
This may not be easily implementable. But it is a clean solution.
For OLTP environments, patition table only will help a lot.
Allocate a separate database for tis data. And using parallel queries(empolying multiple nodes processors), we can speed up the query output.

