We have a single flat table consisting of ~50 million records of data with ~100 columns on Oracle 11g DBMS. A single table was made primarily for performance reasons.
There are multiple client-applications which execute different select SQL-queries against this table, moreover they can listen for updates from this table asynchronously.
Issues:
The main problem - some of sql-queries work very slowly - up to 8 minutes, to be exact. The thing is that SQL-queries can be arbitrary, it's up to a client. Oracle-hints is not a solution. Furthermore, in some cases Oracle optimizator makes wrong estimations or db-indices degrade performance. Relational db sucks here.
Requirements:
- Queries must be based on standard SQL.
- Significantly improve the speed of almost any Select-query execution from this table.
- The solution must be scalable in terms of number of clients and data.
- The solution should be simple and cost-effective.
The question:
What solutions/architecture do you recommend to achieve the above requirements? We may consider different non-relational databases or in-memory caches, develop our own solution, whatever.