A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Trabalho de Desenvolvimento Processamento/Optimização de Querys.

Apresentações semelhantes


Apresentação em tema: "Trabalho de Desenvolvimento Processamento/Optimização de Querys."— Transcrição da apresentação:

1 Trabalho de Desenvolvimento Processamento/Optimização de Querys

2 Optimizador O MySQL tem um Optimizador que consiste num conjunto de rotinas e que decide qual o caminho de execução das querys que o SGBD deve seguir. O MySQL tem um Optimizador que consiste num conjunto de rotinas e que decide qual o caminho de execução das querys que o SGBD deve seguir. Quando uma query é alterada para outra que produz o mesmo resultado, isso é uma Transformação. Quando uma query é alterada para outra que produz o mesmo resultado, isso é uma Transformação.

3 Técnicas de Optimização Propagação de constantes Propagação de constantes WHERE column1 = column2 AND column2 = 'x WHERE column1='x' AND column2='x Esta transformação ocorre para os operadores(=,, =, <>,, LIKE). A propagação constante é feita em ciclo, logo um passo de propagação pode ser utilizado para outro passo. 1. 1. /sql/sql_select.cc, change_cond_ref_to_const() 2. 2. /sql/sql_select.cc, propagate_cond_constants()

4 Técnicas de Optimização Eliminação de código morto Eliminação de código morto WHERE 0=0 AND column1='y' WHERE column1='y' WHERE (0 = 1 AND s1 = 5) OR s1 = 7 WHERE s1 = 7 1. 1. /sql/sql_select.cc, remove_eq_conds(). Desdobramento de constantes WHERE column1 = 1 + 2 WHERE column1 = 3

5 Técnicas de Optimização Constantes e Tabelas Constantes query1: SELECT Table1.unique_not_null_column, Table2.any_column FROM Table1, Table2 WHERE Table1.unique_not_null_column = Table2.any_column AND Table1.unique_not_null_column = 5; A tabela1 tem a coluna unique_not_null definida como sendo INT NOT NULL UNIQUE A expressão FROM Tabela1... WHERE unique_not_null = 5 devolve uma tabela constante. Assim sendo, o MySQL avalia a tabela constante e descobre que pode simplificar a query1 na seguinte query: SELECT 5, Table2.any_column FROM Table1, Table2 WHERE 5 = Table2.any_column AND 5 = 5; 1. 1. /sql/sql_select.cc, make_join_statistics()

6 Técnicas de Optimização Join Type Join Type Quando avalia uma expressão condicional, o MySQL decide que tipo de join a expressão tem.(Apesar de ser usado o termo join, isto aplica-se para todas as expressões condicionais. system – uma tabela de sistema que é uma tabela constante const – uma tabela constante eq_ref - índice único/primário com '=' para o joining ref - índice com '=' ref_or_null – índice com '=', possivelmente NULL range – índice com BETWEEN, IN, >=, LIKE, etc. index – scan sequencial ao índice ALL – scan sequential à tabela 1. 1. /sql/sql_select.h, enum join_type{}

7 Técnicas de Optimização Join Types (cont) Join Types (cont) O optimizador utiliza os join types para escolher a driver expression. SELECT * FROM Tabela1 WHERE indexed_column = 5 AND unindexed_column = 6 Como a indexed_column tem melhor index type será, provavelmente esolhida para ser a driver. Procurar as linhas que têm a indexed_column = 5 e para cada linha examinar o valor da unindexed _column e verificar se satisfaz a condição.

8 Técnicas de Optimização Transposição Transposição O MySQL suporta a troca de ordem dos operadores em ralação a um operador relacional para expressões simples. WHERE - 5 = column1 WHERE column1 = -5

9 Optimização de cláusulas where Remoção de parêntesis desnecessários Remoção de parêntesis desnecessários ((a AND b) AND c OR (((a AND b) AND (c AND d)))) (a AND b AND c) OR (a AND b AND c AND d) (a AND b AND c) OR (a AND b AND c AND d) Substituição por constantes Substituição por constantes (a<b AND b=c) AND a=5 b>5 AND b=c AND a=5 b>5 AND b=c AND a=5

10 Optimização de WHERE Remoção de condições constantes Remoção de condições constantes (B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6) B=5 OR B=6 B=5 OR B=6 Detecção precoce de expressões de constantes inválidas. O MySQL detecta selects que são impossíveis e não retornam linhas Detecção precoce de expressões de constantes inválidas. O MySQL detecta selects que são impossíveis e não retornam linhas Para cada tabela num join é construído um where mais simples, para eliminar registos o mais cedo possível Para cada tabela num join é construído um where mais simples, para eliminar registos o mais cedo possível

11 Optimização de AND Se nenhuma condição é indexada é utilizado um scan sequencial Se nenhuma condição é indexada é utilizado um scan sequencial Se uma condição tiver um join type melhor, então é escolhida para ser a driver Se uma condição tiver um join type melhor, então é escolhida para ser a driver Se as condições forem indexadas e tiverem join types iguais é escolhida a condição com o índice que foi criado primeiro Se as condições forem indexadas e tiverem join types iguais é escolhida a condição com o índice que foi criado primeiro

12 Fontes manual.chm, que pode ser encontrado na pasta Docs dentro da pasta do source code do MySQL 5.0.16 manual.chm, que pode ser encontrado na pasta Docs dentro da pasta do source code do MySQL 5.0.16 http://dev.mysql.com/doc/refman/5.1/en/ http://dev.mysql.com/doc/refman/5.1/en/ http://downloads.mysql.com/docs/internals- en.pdf http://downloads.mysql.com/docs/internals- en.pdf


Carregar ppt "Trabalho de Desenvolvimento Processamento/Optimização de Querys."

Apresentações semelhantes


Anúncios Google