I second Hubson's answer. I myself may not a decent sql server developers, but I have faced with big tables (around 1m rows). So more or less I have the experience for this.
Referencing to this SE answer, I can say that multiple DB on same harddisk won't give performance boost due to I/O capacity of harddisk. If you can somehow put the reporting DB to different harddisk, then you can gain the benefit by having one hdd intensive on I/O
, and other in read only
.
And if both databases exists in same instance, it shares the same memory
and tempdb
, which gives no benefit to performance or reducing I/O cost at all.
Moreover, 300k rows is not a big deal, unless it is joined with 3 other 300k tables, or having a very complex query that requires data cleanup, etc. It is different though if your data growth rate is increasing fast in the future.
What you can do to increase the performance of report, without having involving the performance impact for operational db?
Proper indexing
Beside requiring some storage, proper indexing can lead to faster data processing and you will be amazed with how it speed up processes.
Proper locking
NoLock
imho is the best to use for reporting, unless you use different locking strategy than serialized one in database. Some skew in report result caused by uncommitted transaction usually not matter much.
Summarize data
A scheduled process to generate summarized data can also be used to prevent re-calculation for report reading.
Edit:
So, what is the benefit of having the second database? It is beneficial though to has it, even though
does not give direct benefit to performance. Second database can be used to keep the transaction db clean and separated with reporting activity. Its benefits:
Keeping the materialized data
For example a summary of total profit generated each month can be stored in table which belong to this specific db
Keeping the reporting logics
You can secure access for specific people which is different with transactional db
The file generated for db is separated with transactional. It is easier for backup/restore (and separating with transactional) and when you want to move to different harddisk, then it is easier
In short, adding another normal database for this situation will not give much benefit in performance, unless it is done right (separate the harddisk, separate the server, etc). However second database gives benefit in maintainability aspects and security strategies though.