Queries em bases de dados com grande volume de informação, por Tiago Oliveira

Em cenários de grandes volumes de informação em bases de dados, deveremos ter cuidado sobre a forma de como são executadas queries.
Partilho alguns cenários a considerar:
Queries sem limite máximo de retorno de informação
Imaginemos que temos uma query que permite obter a totalidade dos registos de uma tabela. Se a tabela tiver 100 registos OK, se tiver 1000 registos cuidado, se tiver 10 milhões caos.
Acção - Garantir que existe sempre um número máximo de registos a retornar independentemente do pedido efetuado pelo cliente. Limitando por exemplo o número máximo de 100 registos a retornar.
Queries que executam um full table scan
Para quem não sabe, um full table scan, é uma acção que requer o acesso à totalidade da informação de uma tabela. Imaginemos que temos uma tabela com 10 milhões de registos com info de clientes. Se tentarmos obter a lista dos clientes do Porto, a base de dados terá de percorrer todos os 10 milhões de registos da tabela para descobrir os clientes do Porto. À ação de percorrer todos os registos de uma tabela dá-se o nome de “full table scan”. Uma query que faça full table scan, vai incrementando o tempo de execução consoante o crescimento do volume da tabela, pelo que estes problemas normalmente não são descobertos no inicio das implementações, pois nessa altura não se trabalha com grandes volumes de informação.
Ação - Para colmatar a execução de “full table scans”, deveremos criar indexes, que são mais ou menos atalhos organizados que agilizam a obtenção da informação. Como exemplo para o cenário em cima, criaríamos um index com a cidade do cliente. A base de dados criaria uma estrutura organizada por cidade com um apontador para cada registo na tabela. Assim quando pediríamos os clientes do Porto, a base de dados iria primeiro ao index obter os clientes elegíveis, evitando ter de percorrer todos os 10 milhões de registos.
Podemos validar a execução de ações efetuadas pela base de dados após execução de uma query, obtendo o seu plano de execução. Um plano de execução mostra a sequência de ações executadas pela base de dados para obter a informação desejada.
Será no plano de execução que conseguimos obter a informação se um full table scan está ou não a ser realizado.
Mais info: