What is the most efficient way to store multiple dynamic filter which can be created by users on given data and us the filter for aggregating data?
Lets assume I have a table called t_filter which will store some data filter/queries for given data t_data.
The user can build each filter completely dynamic and can save it to create some kind of dashboard (list of the saved filter by filter_name and some aggregation function on the data which is filtered by the conditions).
Each filter can have different conditions and operators (>=, <=, !=, ==, IS NOT NULL, IS NULL, AND, OR, BETWEEN, etc.) on the different fields of given entries in t_data.
The user can modify its filter: create/update/delete and the entries in t_data can grow through imports or shrink through deletes, so everything is kind of dynamic.
I solved this problem by creating dynamic SQL based on the created filter from the user, UNION ALL every of the existing dynamic SQL entries in t_filter and creating a Materialized View out of the result (just the foreign key information: which filter_id belongs to which data_id).
This solution works but is not that handy because I need to check for filter changes and regenerate the Materialized View as well as for new or deleted entries in t_data.
For every additional filter entry the time to generate the View is taking longer because of the extra SQL which needs to be executed.
Is there a better way to solve that problem?