You essentially have two systems: one that collects data and one that reports this data.
Running reports against your frequently updated transactional tables is likely to result in read locks that block writing from completion as much as possible, and therefore can degrade performance.
It is generally recommended that you perform the periodic “gathering” task, which collects information from your (possibly highly normalized) transaction tables and writes data to the denormalized report tables, forming a “data warehouse”. Then you specify your reporting mechanism / tools in a denormalized “data warehouse” that you can query about without affecting the actual transactional database.
This collection task should only be performed as often as your reports should be "accurate." If you can leave once a day, great. If you need to do this once an hour or more, then go ahead, but watch how you work on your tasks when recording.
Remember that if the performance of your transactional system is important (and usually it is), avoid running reports against it at all costs.
source share