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

Dica da Semana por Tiago Oliveira - Queries em bases de dados com grande volume de informação

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.

queries

 

Mais info:

https://en.wikipedia.org/wiki/Full_table_scan

https://en.wikipedia.org/wiki/Database_index