The current render engine will load the entire row from the datasource. This involves a potentially large overhead, as it typically needs only a few columns to style the layer.
In a test case I worked on, I was able to reduce render time from 20 to 12 seconds, just by removing unused columns from the dataset.
This solution does not work when the data is required for anything but rendering.
For a simple fix, I propose that the render figures out what columns are used by looking at the scalerange condition rules and tooltip.
It might introduce a significant overhead to preparse this data. If this overhead is inacceptable, the RuntimeMap? could include this information, so that it is done once pr. map, and not at each rendering.