Armazenamento orientado a linhas e partições

Melhorando o Desempenho de Consultas no PostgreSQL

Amy McCarty

Instructor

Tipos de armazenamento em banco de dados

Armazenamento orientado a linhas

  • Relação entre colunas preservada

Armazenamento orientado a colunas

  • Relação entre linhas preservada
id name species age habitat received
01 Bob panda 2 Asia 2018
02 Sunny zebra 3 Africa 2018
03 Beco zebra 10 Africa 2017
04 Coco koala 5 Australia 2016
Melhorando o Desempenho de Consultas no PostgreSQL

Orientado a linhas

Armazenamento orientado a linhas

  • Relação entre colunas preservada

 

id name species age habitat received
01 Bob panda 2 Asia 2018
Melhorando o Desempenho de Consultas no PostgreSQL

Orientado a colunas

Armazenamento orientado a colunas

  • Relação entre linhas preservada  

Duas tabelas. A primeira é uma lista de ids e nomes. 01 - Bob. 02 - Sunny. 03 - Beco. 04 - Coco. A segunda tem os mesmos ids com espécies. 01 - panda. 02 - zebra. 03 - zebra. 04 - koala.

Melhorando o Desempenho de Consultas no PostgreSQL

Armazenamento orientado a linhas

 

  • Uma linha armazenada no mesmo local
  • Rápido para anexar ou excluir registros inteiros
  • Rápido para retornar todas as colunas
    • Lento para retornar todas as linhas
Melhorando o Desempenho de Consultas no PostgreSQL

Reduzindo as linhas

Reduza o número de linhas

  • Filtro WHERE
  • INNER JOIN
  • DISTINCT
  • LIMIT
Melhorando o Desempenho de Consultas no PostgreSQL

Métodos em bancos orientados a linhas

Partições

  • Método de dividir uma tabela (pai) em várias tabelas menores (filhas)

Índices

  • Método de criar chaves de coluna ordenadas para melhorar a busca

 

Uso de partições e índices

  • Exigem configuração e manutenção
  • Existência conhecida pelo administrador do banco ou documentação
Melhorando o Desempenho de Consultas no PostgreSQL

Estrutura de partição

Uma tabela pai de animais de zoológico com quatro registros mostrando id, name, species, habitat e ano de recebimento. 01 - Bob - Panda - age - habitat - received. 02 - Sunny - Zebra - 3 - Africa - 2018. 03 - Beco - Zebra - 10 - Africa - 2017. 04 - Coco - Macaw - 5 - South America - 2016. Há 3 tabelas filhas correspondentes à coluna habitat. A tabela Asia tem um registro para Bob. A Africa tem dois para Sunny e Beco. A South America tem um para Coco.

  • Tabela pai
    • Visível no front-end do banco
    • Onde você escreve consultas
  • Tabelas filhas
    • Não visíveis no front-end do banco
    • Consultas pesquisam nelas
Melhorando o Desempenho de Consultas no PostgreSQL

Estrutura de partição

Uma tabela pai de animais de zoológico com quatro registros mostrando id, name, species, habitat e ano de recebimento. 01 - Bob - Panda - age - habitat - received. 02 - Sunny - Zebra - 3 - Africa - 2018. 03 - Beco - Zebra - 10 - Africa - 2017. 04 - Coco - Macaw - 5 - South America - 2016. Há 3 tabelas filhas correspondentes à coluna habitat. A tabela Asia tem um registro para Bob. A Africa tem dois para Sunny e Beco. A South America tem um para Coco. A tabela Africa está destacada em vermelho.

SELECT species
FROM zoo_animals
WHERE habitat = 'Africa'
Melhorando o Desempenho de Consultas no PostgreSQL

Visão geral de partições

O quê

  • Divisão de uma tabela em várias menores

Por quê

  • Flexibilidade de armazenamento
  • Consultas mais rápidas

Onde

  • Colunas comuns de filtro
    • Data, local
Melhorando o Desempenho de Consultas no PostgreSQL

Avaliação de consulta com partição

Planejador de consultas

Vários chefs ao redor de uma grande panela

EXPLAIN
SELECT species
FROM zoo_animals
WHERE habitat = 'Africa'

Plano da consulta

Seq Scan on zoo_animals  (cost=0.00..
17.70 rows=2 width=182)
  Filter: (state_code = 15)
  • Estimativas de custo (tempo)
Melhorando o Desempenho de Consultas no PostgreSQL

Vamos praticar!

Melhorando o Desempenho de Consultas no PostgreSQL

Preparing Video For Download...