Compras através da loja FirebirdSQL geram comissões que financiam o desenvolvimento open source do Firebird.

Licença: Por Usuário

Preço (versão em português): R$ 99 

Descrição: Cópia em PDF e EPUB do livro

100% do lucro deste item vai para a Firebird Foundation para financiar o desenvolvimento do banco de dados Firebird.

Livro: Segredos do Otimizador SQL do Firebird (oferta limitada: -45% desconto com codigo bookdiscount45)

Capa de Segredos do Otimizador SQL do Firebird
Este livro é de autoria de Denis Simonov, que contribuiu para numerosas seções da documentação oficial do Firebird SQL.

"Segredos do Otimizador SQL do Firebird" está disponível agora!

Gostaria de ter o livro no seu idioma? Envie uma consulta para [email protected], e se houver muitas solicitações, prepararemos a tradução.

O livro é distribuído em formato PDF (421 páginas), com cada versão de idioma disponível separadamente.

O que torna este livro um presente ideal para qualquer desenvolvedor Firebird? Duas razões convincentes: 1) é o primeiro recurso abrangente oferecendo insights profundos sobre como as consultas do Firebird funcionam internamente, combinando conceitos teóricos e exemplos práticos, e 2) 100% dos lucros das vendas do livro são doados para a Firebird Foundation como comissão, apoiando diretamente o desenvolvimento do Firebird.

Baixar capítulos de amostra (Introdução, "Capítulo 1. Como Medir o Desempenho de Consultas?", e "Capítulo 3. Métodos de Acesso a Dados Usados no Firebird").

CONTEÚDO

Introdução: O Caminho para Entender o Otimizador do Firebird
Por Que o Desempenho Importa
A Evolução das Abordagens de Otimização: Do Hardware ao Entendimento
A Armadilha da Escalabilidade Infinita de Recursos
Erros Típicos: Quando Código Bom Se Torna Lento
Evolução do Firebird e do Otimizador: Do Firebird 1 ao 5
Sobre o Que É Este Livro: Um Roteiro por Capítulos
Como Ler Este Livro: Recomendações Práticas
O Que Você Obterá Após Ler Este Livro

Capítulo 1. Como Medir o Desempenho de Consultas?
1.1. Habilitando a Saída de Estatísticas de Execução no isql
1.2. O Que Esses Números Significam?
1.3. Como Obter o Tempo para Buscar Todos os Registros
1.4. Transformação de Consultas
1.5. Medindo o Desempenho de Consultas Sob Carga
1.6. Usando Rastreamento para Medir o Desempenho de Consultas
1.7. Conclusões

Capítulo 2. O que é um plano de execução de consulta?
2.1. Plano legado
2.2. Plano de explicação
2.3. Como obter um plano de execução de consulta?
2.3.1. Obtendo um plano de execução de consulta na API do Firebird
Obtendo um plano de execução de consulta no isql
2.3.2. Obtendo um plano de execução de consulta em um rastreamento
2.4. Obtendo Planos de Execução de Consultas nas Tabelas MON$
2.4.1. Tabela MON$STATEMENTS
2.4.2. Tabela MON$COMPILED_STATEMENTS
2.5. Um Olhar para o Futuro
2.5.1. Obtendo o Plano com RDB$SQL.EXPLAIN
2.6. Conclusão

Capítulo 3. Métodos de Acesso a Dados Usados no Firebird
3.1. Terminologia
3.2. Métodos Primários de Acesso a Dados
3.2.1. Lendo uma Tabela
Varredura Completa de Tabela
Acesso por Identificador de Registro
Acesso Posicionado
3.2.2. Acesso por Índice
Seletividade de Índice
Índices Parciais
Bitmaps
Varredura de Intervalo
Interseção e união de bitmaps
Navegação por índice
3.2.3. Acesso via RDB$DB_KEY
3.2.4. Tabela externa (Varredura de tabela externa)
3.2.5. Tabela virtual (Varredura de tabela virtual)
3.2.6. Tabela temporária local (Tabela local)
3.2.7. Acesso procedural
3.3. Filtros
3.3.1. Verificação de Predicados
Verificação de Predicados Invariantes
3.3.2. Ordenação
Rebusca
3.3.3. Agregação
Filtragem na Cláusula HAVING
3.3.4. Contadores
3.3.5. Verificação de Singularidade
3.3.6. Bloqueio de Registros
3.3.7. Ramificação Condicional de Fluxo
3.3.8. Buffer de Registros
3.3.9. Janela Deslizante (Window)
3.4. Métodos de Mesclagem
3.4.1. Junções
Junção em Loop Aninhado
Junção Hash
Mesclagem de Passagem Única (Merge)
Junção Externa Completa
Junção com procedimento armazenado
Junção com expressões de tabela
Junção com Views
3.4.2. Uniões (Union)
Materialização de Expressões Não-Determinísticas
Materialização de Subconsultas
3.4.3. Recursão
3.5. Estratégias de Otimização
3.6. Conclusão

Capítulo 4. Transformação de Consultas
4.1. Transformação de Predicados de Filtragem
4.1.1. Transformação do Predicado LIKE
4.1.2. Transformação do Predicado SIMILAR TO
4.1.3. Inversão de Predicados
4.1.4. Transformação do Predicado IN com Lista de Valores
4.2. Transformação de Subconsultas
4.2.1. Transformação de IN para SOME/ANY
4.2.2. Transformação de Subconsultas ANY/ALL em Forma Correlacionada
4.2.3. Transformação de NOT IN, NOT ANY, ALL <>
4.2.4. Transformação para semi-join
4.2.5. Transformação para anti-join
4.3. Transformação de junções (JOINs)
4.3.1. Transformação de RIGHT JOIN para LEFT JOIN
4.3.2. Transformação de OUTER JOIN para INNER JOIN
4.3.3. Transformação de OUTER JOIN para anti-join
4.4. Conclusão

Capítulo 5. Estatísticas por Tabela
5.1. Obtendo Estatísticas por Tabela no isql
5.2. Obtendo Estatísticas por Tabela Usando Rastreamento
5.3. Obtendo Estatísticas por Tabela Usando Tabelas de Monitoramento
5.3.1. MON$TABLE_STATS
5.3.2. MON$RECORD_STATS
5.3.3. Exemplos de Obtenção de Estatísticas por Tabela Usando Tabelas MON$
5.4. Conclusão

Capítulo 6. Obtendo Estatísticas com gstat
6.1. Descrição do utilitário gstat
6.2. Obtendo Estatísticas Usando fbsvcmgr
6.2.1. Sintaxe de Parâmetros do fbsvcmgr
Sintaxe SPB
6.2.2. Obtendo Ajuda
6.2.3. Parâmetros de Conexão de Serviço
6.2.4. Usando Serviços com um Banco de Dados de Segurança Não Padrão
6.2.5. Parâmetros para Obter Estatísticas com fbsvcmgr
6.2.6. Exemplo de Análise de Estatísticas para Tabelas e Índices de uma Consulta
6.3. Análise das Estatísticas Obtidas
6.3.1. Estatísticas da Página de Cabeçalho
6.3.2. Estatísticas de Tabela
Páginas Primárias e Secundárias
Versões de Registro e Fragmentos
6.3.3. Estatísticas de Índice de Tabela
Profundidade do Índice
Número de Páginas Folha
Número de Nós e Duplicatas de Chave
Índices Parciais
Tamanho da Chave e Taxa de Compressão
Fator de Agrupamento

Capítulo 7. Índices
7.1. Tipos de Índices
7.2. Quando o Otimizador Pode Usar um Índice?
7.3. Usando Índices para Filtragem
7.3.1. Operador BETWEEN
7.3.2. Predicado IN
7.3.3. Índice para Colunas ou Expressões Booleanas
7.3.4. Índice em Expressão
7.3.5. Desabilitando o Uso de Índice
7.3.6. Estatísticas de Índice
Seletividade de Índice
Seletividade de Segmentos de Índice Composto
Seletividade de Predicados Indexados
7.3.7. Índices Compostos
7.3.8. Usando Múltiplos Índices
7.3.9. Ramificação Condicional de Fluxo
7.3.10. Índice Composto ou Vários Índices Simples?
Seletividade de Índice Composto é Mais Precisa
Índices Compostos São Mais Caros de Manter
Índices Compostos Não Podem Ser Usados para Combinar Predicados OR
É Impossível Especificar uma Expressão para Uma das Colunas Incluídas no Índice Composto
Quando Você Deveria Criar um Índice Composto?
7.3.11. Índices Parciais
Índices Parciais Únicos
Quando Índices Parciais Podem Ser Usados pelo Otimizador?
Seletividade de um Índice Parcial
Reduzindo o Tamanho do Índice
Usando Índices Parciais com Predicados Não Seletivos
Índices Parciais com Condições Não Incluindo a Coluna Chave
Índices Parciais com Condições Combinadas via OR
Índices Parciais com o Predicado IN na Condição de Filtro
Quando Índices Parciais Não Podem Ser Usados
7.4. Usando Índices em Condições de Junção
7.4.1. Como os índices são usados em condições de junção?
7.4.2. Usando índices com o algoritmo Nested loop join
Usando Múltiplos Índices
Usando Índices Compostos
7.4.3. Usando Estatísticas de Índice pelo Algoritmo Hash Join
7.5. Usando Índice para Ordenação
7.5.1. Quando um índice pode ser usado para ordenação?
7.5.2. Navegação (ordenação) por um índice simples
7.5.3. Navegação (ordenação) usando um índice em uma expressão
7.5.4. Desabilitando a Navegação por Índice
7.5.5. Navegação (Ordenação) por Índice Composto
7.5.6. Filtragem Durante Navegação (Ordenação) por Índice
Predicado de Filtro Não Indexado
Filtragem por um Índice Diferente
Filtragem pelo Mesmo Índice Usado para Navegação
Filtragem por um Segmento do Mesmo Índice Composto Usado para Navegação
7.5.7. Limitando o Número de Linhas
Pulando N Registros
Contadores e Filtros
7.5.8. Navegação por Índice (Ordenação) em Consultas Multi-Tabela
Limitando o Número de Registros
7.5.9. Custo da Navegação por Índice (Ordenação)
7.6. Usando Índice para Agrupamento
7.6.1. Filtragem no Agrupamento
Predicado de Filtro Não Indexado
Filtragem por um Índice Diferente
Filtragem pelo Mesmo Índice Usado para Agrupamento
Filtragem de um Segmento do Mesmo Índice Composto Usado para Agrupamento
7.6.2. Agrupamento e Limitadores FIRST/ROWS/OFFSET
7.6.3. Agrupamento e Ordenação
7.6.4. Agrupamento em Consultas Multi-Tabela
7.7. Usando Índices para Cálculo de Função Agregada MIN/MAX
7.7.1. MIN/MAX e NULL
7.7.2. Desabilitando o Uso de Índice no Cálculo MIN/MAX
7.7.3. Cálculo MIN/MAX e Filtragem
7.7.4. Predicado de Filtro Não Indexado
7.7.5. Predicado de Filtro Indexado Usando Outro Índice
7.7.6. Predicado de Filtro Indexado Usando o Mesmo Índice
7.7.7. Predicado de Filtro Indexado em um Segmento do Mesmo Índice
7.7.8. Calculando MIN/MAX com Agrupamento
7.7.9. Calculando MIN/MAX em consultas com junções de tabela
7.8. Conclusão

Capítulo 8. Otimizando Junções
8.1. Juntando Duas Tabelas
8.1.1. INNER JOIN de Duas Tabelas
Índices para Campos e Expressões
Recalculando Estatísticas de Índice
Dicas +0 ou ||'' para o Otimizador
Usando LEFT JOIN como uma Dica
Usando um Plano Explicitamente Especificado
Condições de Filtro Adicionais
8.1.2. LEFT/RIGHT JOIN de Duas Tabelas
Condições de Filtro Adicionais
E se você precisar evitar transformações de junção externa
8.1.3. FULL JOIN de Duas Tabelas
Condições de Filtro Adicionais
8.2. Junções de Tabelas com Procedimentos Armazenados
8.2.1. Junção Interna de um Procedimento Armazenado e uma Tabela (Sem Dependências via Parâmetros de Entrada)
8.2.2. Junções Externas Unilaterais de Procedimento Armazenado e Tabela
8.2.3. Junções de um Procedimento Dependente do Fluxo de Dados via Parâmetros de Entrada
8.3. Juntando uma Tabela com uma Expressão de Tabela
8.3.1. Junções com Expressões de Tabela Simples
8.3.2. Junções Internas com Expressões de Tabela Complexas
8.3.3. Junções Externas Unilaterais com Expressões de Tabela Complexas
8.3.4. Junções de Tabela Derivada LATERAL
Substituindo Subconsultas Similares
Eliminando Duplicação de Parte de Consulta em UNION ALL
Usando LATERAL para Especificar Ordem de Junção com Tabelas Derivadas
8.4. Junções de Três ou Mais Tabelas
8.4.1. Especificando Ordem e/ou Algoritmo para Junções Internas de Três Tabelas
8.4.2. Junções Internas e Externas em uma Única Consulta
8.5. Conclusão

Capítulo 9. Otimização de Ordenações
9.1. Estimando o Custo de uma Ordenação Externa
9.2. Otimizando Ordenações Externas Largas (Refetch)
9.2.1. Quais valores de parâmetro de configuração escolher?
9.3. Transformação de consulta para reduzir a largura da ordenação
9.4. Conclusões

Capítulo 10. Otimizando Operações de Agrupamento
10.1. Eficiência do Agrupamento Usando Ordenação Externa
10.2. Usando Funções Agregadas Adicionais para Reduzir a Largura da Ordenação na Agregação
10.3. Juntando Outras Tabelas Após o Agrupamento
10.4. GROUP BY ou DISTINCT
10.5. Conclusões

Capítulo 11. Conclusão
11.1. Feedback