Parece que em linguagens de consulta populares para bancos de dados relacionais, é possível criar consultas que exigirão muitos recursos para serem respondidas. Na prática, os administradores de banco de dados gerenciam isso limitando a quantidade de memória por consulta e verificando se há consultas de longa duração, se houver uma desaceleração no banco de dados. Isso parece bastante ad-hoc, existe uma solução TCS para isso?
Existem linguagens de consulta que podem implementar apenas consultas eficientes?
Se não existem tais idiomas, existe uma razão teórica para isso?
Algumas razões pelas quais eu poderia esperar que esse tipo de coisa exista ou pelo menos fazem sentido:
- temos linguagens de programação projetadas especificamente para implementar apenas cálculos eficientes (geralmente com uma lógica restritiva no sistema de tipos)
- linguagens de consulta populares (como SQL) já são inspiradas pela lógica, portanto, não parece um exagero para os usuários do banco de dados considerar lógicas mais restritivas.
- um usuário de banco de dados não malicioso já tenta preparar consultas que são executadas rapidamente, portanto, devemos esperar que essas linguagens de consulta mais restritivas prejudiquem apenas usuários mal-intencionados.
Esta pergunta é inspirada na interseção de duas perguntas anteriores: