Anda di halaman 1dari 61

Performance e Otimizao de

Banco de Dados MySQL


ndice
Introduo 05
1. Indexao de Tabelas 06
O que so ndices? 08
Tipos de ndices? 08
Por que utilizar? 09
Quando utilizar? 10
Como criar um ndice simples? 11
Adicionando ndices a tabelas existentes 13
Tutorial completo (vdeo) 15
2. Particionamento de Tabelas 17
Quais as vantagens? 19
Tipos de particionamentos disponveis 21
RANGE 22
RANGE COLUMNS 26
LIST 28
LIST COLUMNS 31

Performance e Otimizao de Banco de Dados MySQL 2


HASH 33
KEY 36
[LINEAR] HASH e [LINEAR] KEY? 38
Subparticionamento 39
3. Otimizao de Consultas 42
ndices x Consultas 43
O que deve ser indexado? 43
O que no bom indexar 47
Cardinalidade 48
Particionamento x Consultas 48
JOINS 49
EXPLAIN 49
4. Infraestrutura 51
Servidor Banco de Dados x Servidor Aplicao 52
O que utilizar no servidor de dados? 53
Monitore consultas lentas 54
Perguntas frequentes 55
Pronto para otimizar o seu Banco de Dados MySQL? 57

Performance e Otimizao de Banco de Dados MySQL 3


Antes de ler
Algumas dicas so extremamente importantes para que voc aproveite o melhor
que esse ebook tem para oferecer:

1. Todas as tcnicas apresentadas nesse ebook so vlidas ou possuem foco para


o SGBD MySQL. Isso no quer dizer que outros SGBDs no possuam recursos
similares. Entretanto, a forma de utilizar esses recursos pode ser levemente ou
totalmente diferente. Sendo assim, em alguns casos, possvel que voc
consiga aplicar os aprendizados desse ebook em outros SGBDs, sem maiores
dificuldades; J, em outros casos, no.

2. Esse ebook um contedo de nvel intermedirio. Portanto, se voc no possui


esse nvel de fluncia com Banco de Dados Relacionais e MySQL. necessrio
que voc busque, em primeiro lugar, aprender os conceitos iniciais sobre estas
tecnologias. Na Becode, temos um curso focado em introduzir o profissional no
ramo do Banco de Dados Relacionais, utilizando o MySQL. D uma olhada!

Performance e Otimizao de Banco de Dados MySQL 4


Introduo
Neste e-book vamos mostrar as melhores prticas para a
configurao de um servidor MySQL, visando o desenvolvimento de
aplicaes que consumam menos dados, de forma mais efetiva e
otimizada.

Este ebook est dividido em quatro mdulos principais:

Indexao de Tabelas

Particionamento de Tabelas

Otimizao de Consultas

Infraestrutura

Esperamos que voc goste do material e, principalmente,


aprenda muito com ele! Boa leitura!

Performance e Otimizao de Banco de Dados MySQL 5


Indexao
de tabelas
Como a indexao favorece a
velocidade de buscas.
Indexao de Tabelas
Este tpico aborda o funcionamento dos ndices, sua importncia para as questes de
performance e relevncia no consumo de dados, na utilizao de um banco de dados
MySQL. Para entender melhor os ndices preciso focarmos em quatro perguntas:

O que so?

Quais tipos?

Por que utilizar?

Quando utilizar?

Performance e Otimizao de Banco de Dados MySQL 7


O que so ndices?
No contexto da estrutura de dados: trata-se de uma referncia associada
a uma chave. utilizada para fins de otimizao de consultas, pois permite
a localizao mais rpida de um registro.

No contexto de banco de dados: trata-se de uma estrutura (ou arquivo)


auxiliar associado a uma tabela (ou coleo de dados). Possui a funo de
acelerar o tempo de acesso s linhas de uma tabela.

Tipos de ndices?
Existem quatro tipos bsico de ndices:

Compostos - Mais de uma coluna da tabela sendo utilizada;

Simples - Apenas uma coluna da tabela sendo utilizada;

Internos - Dentro da estrutura de dados da tabela;

Externos - Faz referncia fora da tabela

Performance e Otimizao de Banco de Dados MySQL 8


Por que utilizar?
A utilizao de ndices indicada para que haja um menor consumo e
retorno mais rpido do servidor para a aplicao em questo. Resumindo,
eles servem para proporcionar:

Agilidade e performance em buscas;

Menor consumo de recursos (Input e Output de disco), pois consome


menos recurso do servidor, processamento e memria, alm de trazer
retorno para a aplicao de forma mais rpida.

Input e Output (leitura e gravao em disco)? Para cada busca realizada


no servidor de banco de dados, caso aquele dado esteja em memria
(cache), necessrio realizar uma busca diretamente no disco. Essas
buscas tem um alto nvel de processamento.

Performance e Otimizao de Banco de Dados MySQL 9


Quando utilizar?
Os ndices devem ser utilizados sempre que houver um
grande nmero de pesquisas sobre determinado item, afim
de otimizar as buscas e melhorar a performance.

Performance e Otimizao de Banco de Dados MySQL 10


Como criar um ndice simples?
Nos exemplos a seguir, vamos utilizar o banco de dados perf, criado com
quatro tabelas: fotos, noticias, noticias2 e noticias3. Vamos comear
selecionando nosso banco de dados. Abra o terminal e selecione o banco
de dados perf com o seguinte comando:

USE perf;
Agora vamos aprender a criar um ndice simples. Para isso, criamos uma
tabela (produtos), adicionando um ndice para o campo nome, atravs do
comando INDEX idx_nome(Nome):

Performance e Otimizao de Banco de Dados MySQL 11


CREATE TABLE produtos (
Codigo INT,

Nome VARCHAR(50),

key Codigo(Codigo),

INDEX idx_nome(Nome)

);

O ndice (idx_nome) referencia o campo nome, utilizando o campo completo como ndice. Para
visualizar os ndices de uma tabela, voc pode utilizar o comando SHOW INDEXES. A partir
da tabela recm-criada, vamos para o prompt e escrevemos o comando:

SHOW INDEXES FROM produtos;

Agora voc j sabe como criar um ndice no momento da criao da tabela. Portanto, vamos
excluir a tabela recm criada e aplicar um exemplo mais usual. Para isso, utilize o comando
DROP TABLE para excluir a tabela recm criada.

DROP TABLE produtos;

Performance e Otimizao de Banco de Dados MySQL 12


Adicionando ndices a
tabelas existentes
importante que o banco de dados seja planejado para a otimizao
de certas buscas. Caso contrrio, no momento em que as aplicaes
necessitarem consumir mais dados do banco, poderemos ter
problemas na performance. Em uma situao comum, no teramos
ndices na estrutura inicial da tabela. Por isso, vamos criar novamente
a tabela produtos sem adicionar ndices.

CREATE TABLE produtos (

Codigo INT,

Nome VARCHAR(50),

key Codigo(Codigo)

);

Performance e Otimizao de Banco de Dados MySQL 13


Quando percebemos que a aplicao est perdendo performance, pois so feitas muitas
requisies de busca pelo nome dos produtos, podemos resolver o problema atravs de
um ndice para o campo nome. Para adicionar um ndice em uma tabela j criada, vamos
utilizar o seguinte comando:

CREATE INDEX idx_nome ON produtos(Nome);

Performance e Otimizao de Banco de Dados MySQL 14


Tutorial completo sobre ndices
Neste webinar realizado pela equipe da KingHost, detalhes prticos quanto a
utilizao de ndices, benefcios trazidos, como fazer e entre outros pontos so
elucidados de uma forma mais clara, onde voc pode ver profissionais realizando na
prtica, tcnicas de otimizao de consultas atravs da criao de ndices.

Inclusive, no Webinar, voc consegue ver a diferena existente, em termos de


performance, entre tabelas que utilizam ndices e as que no utilizam. Para ver o vdeo,
acesse o seguinte link.

(Esta explicao encontra-se entre os minutos 16:00 e 27:30)

Performance e Otimizao de Banco de Dados MySQL 15


Assista aqui o nosso vdeo tutorial
e aprenda a usar ndices em SQL
Particionamento
de tabela
Diviso de tabelas, o caminho para
mais desempenho.
Particionamento de Tabela
Os ndices auxiliam em consultas e subconsultas, porm quando a tabela possui um
grande volume de dados, o desempenho do banco de dados continua prejudicado.

Para resolver este problema, o particionamento de tabelas, ou seja, a diviso de uma


tabela inteira em sub-tabelas menores, torna-se a soluo ideal. A grosso modo,
estamos quebrando tabelas em sub tabelas, ou seja, particionando.

Uso padro das tabelas: Particionamento:


Dados e ndices so armazenados em Dados e ndices so armazenados em
um arquivo nico (dependente da mltiplos arquivos, 1 por partio.
engine de armazenamento). Nmero mximo de parties: 1024
(isto definio do MSQL).

Performance e Otimizao de Banco de Dados MySQL 18


Quais as vantagens?
A aplicao permanece igual!
Na aplicao, nada muda. A tabela continuar sendo vista como uma tabela nica.

Mais dados em uma nica tabela


Dependendo do sistema de arquivos utilizado pelo servidor MySQL, h um limite
mximo de tamanho de arquivo, o que limita a quantidade de dados que podem ser
inseridos em uma tabela. Utilizando o particionamento, partimos a tabela em mltiplos
arquivos, aumentando assim o limite mximo de dados que podem ser inseridos nessa
tabela. Em sistemas de arquivo modernos, esse limite muito alto, mas ainda assim,
uma vantagem.

Performance e Otimizao de Banco de Dados MySQL 19


Remoo de dados absoletos
Dependendo do particionamento utilizado, a remoo de dados obsoletos facilitada.
Esta vantagem mais fcil de explicar utilizando o exemplo abaixo.

Pense em uma escola, onde todas as matrculas encontram-se em uma nica tabela.
Neste caso, poderamos particionar esta tabela nica pelo ano de matricula, gerando
diversas outras sub-tabelas. Portanto, caso no houvesse mais o interesse por um
determinado ano de matrcula, a remoo poderia ser aplicada especificamente
naquele ano de interesse. Desta forma, removendo os dados absoletos.

Desempenho de buscas otimizado


O desempenho de buscas otimizado, pois diminui o universo no qual elas so
realizadas.

Antes a busca era realizada baseando-se em um universo enorme de dados de uma


tabela, agora a busca baseia-se em apenas uma frao deste universo, bem menor e
subdividido.

Performance e Otimizao de Banco de Dados MySQL 20


IMPORTANTE: essencial que, na clusula WHERE da busca, seja especificado o
critrio de particionamento para que o MySQL possa determinar em quais parties
deve realizar a busca. Caso contrrio, um full-scan ser realizado, ou seja, uma busca
em todas as parties; isso ser mais lento que buscar full-scan em uma tabela no-
particionada.

Tipos de particionamento
disponveis
RANGE [COLUMNS]

LIST [COLUMNS]

HASH

[Linear] Key

Range Columns e List Columns s esto disponveis a partir da verso 5.5 do MySQL.
Os servidores da KINGHOST j possuem essa variante.

Performance e Otimizao de Banco de Dados MySQL 21


RANGE
Em Range, o particionamento baseado em intervalo de valores. Como exemplo,
podemos usar uma tabela de matrculas de uma escola. A partio 1 guarda as
matrculas que vo do ano de 1990 at 1999 e a partio 2 ir do ano 2000 at 2010.

Neste intervalo de valores os registros estaro na partio delimitada. Com isso o


MySQL saber automaticamente em qual partio, ou seja, em qual arquivo ele ir
armazenar e qual arquivo ele ir buscar.

IMPORTANTE: O Range pode ser particionado por uma coluna do tipo INT, podendo
ser smallint e suas variantes, mas precisa ser um campo inteiro. Exemplo:

PARTITION BY RANGE (YEAR(matricula) )

Performance e Otimizao de Banco de Dados MySQL 22


EXEMPLO DE RANGE
Em uma tabela de admisso de funcionrios, vamos particionar pelo ms de admisso.
Para isso, criamos uma partio para cada trimestre, sem nos preocuparmos com o ano e
nestas parties estaro os registros do primeiro, segundo, terceiro e quarto trimestres de
todos os anos. Ao executar uma QUERY em que a solicitao seja para buscar todos os
funcionrios admitidos em 20 de maio de 2015, teremos o seguinte:

Select *From Funcionarios WHERE admisso = '2015-05-20'

O MySQL ir entender que maio o ms cinco e ir at o particionamento do segundo


trimestre executando a lgica de busca a seguir:

As parties so avaliadas de cima para baixo. Ou seja, quando a busca efetuada para
achar uma data no ms de maio, o sistema ir se perguntar "partition primeiro trimestre
e ver que cinco no menor que quatro, mas cinco menor do que sete, ento ele ir
para a segunda partio, onde est o ms de maio e a informao desejada.

Performance e Otimizao de Banco de Dados MySQL 23


Performance e Otimizao de Banco de Dados MySQL 24
Modelo Conceitual

Performance e Otimizao de Banco de Dados MySQL 25


RANGE COLUMNS
RANGE COLUMNS uma variante de RANGE. Neste caso, possvel utilizar mais de
uma coluna para realizar o particionamento. Podemos ento usar diversas colunas e
tipos que no sejam campos inteiros.

PARTITION BY RANGE COLUMNS ( YEAR(matricula), id_cidade )

Performance e Otimizao de Banco de Dados MySQL 26


Performance e Otimizao de Banco de Dados MySQL 27
LIST
LIST muito parecido com RANGE, porm, a especificao deve ser feita por valores especficos.

PARTITION BY LIST ( YEAR(matricula) )

Performance e Otimizao de Banco de Dados MySQL 28


EXEMPLO LIST
Ao invs de particionar por ms de admisso, temos funcionrios por filial e h uma
partio que a regio norte, que so os funcionrios cuja a filial so um(1), dois(2) e
Sete(7). Ento, se buscarmos todos os funcionrios que trabalham na filial 7, o MySQL ir
entender que no necessrio ler as outras regies e ir direto para a regio norte.
Observe que no h intervalo de valores neste exemplo. Lembrando que LIST precisa ter
valores inteiros e para LIST COLUMNS no necessrio que haja valores inteiros.

Performance e Otimizao de Banco de Dados MySQL 29


Modelo Conceitual

Performance e Otimizao de Banco de Dados MySQL 30


LIST COLUMNS
A diferena entre LIST e LIST COLUMNS a mesma do RANGE e RANGE COLUMNS. LIST s
aceita uma coluna para realizar o particionamento e List Columns vrias colunas de vrios
tipos.

PARTITION BY LIST COLUMNS ( YEAR(matricula), id_cidade )

Performance e Otimizao de Banco de Dados MySQL 31


Performance e Otimizao de Banco de Dados MySQL 32
HASH
Um dos tipos de particionamentos mais comuns e utilizados. Particiona com base em
um clculo sem especificar o que vai em qual partio, sendo que o MySQL faz o
clculo e define. O HASH normalmente utilizado para ter uma distribuio uniforme
entre as parties, para assim, obter um desempenho melhor na busca.

PARTITION BY HASH ( YEAR(matricula) )

Como funciona o clculo?


Especifica-se para a PARTITION uma coluna (inteira) e o MySQL ir dividir o valor da
coluna pelo nmero de parties definidas para a tabela e o restante da diviso nos
dir em qual partio ele ser armazenado.

Performance e Otimizao de Banco de Dados MySQL 33


Modelo Conceitual

Performance e Otimizao de Banco de Dados MySQL 34


EXEMPLO HASH
Em uma tabela de pedidos que foi particionada em 4. P0, P1, P2 e P3. O clculo ser feito
pelo HASH de Id de cliente e pelo nmero de parties. Ou seja, se for necessrio
consultar os pedidos do cliente 0 ele vai ir para a P0. Caso seja necessrio os dados do
cliente 14, vai ir para a P2, conforme diagrama da pgina anterior.

Isso garante que sempre haver uma distribuio uniforme ao longo das parties.

Performance e Otimizao de Banco de Dados MySQL 35


KEY
Semelhante ao Hash, mas possvel especificar uma coluna ou no. Possui uma srie de
regras que devem ser levadas em considerao para o uso correto, entre elas:

Se no especificada a coluna, o MySQL tentar usar:

Chave primria (se houver)

Chave nica (se houver)

OBS: se no houver nenhuma das duas, a aplicao apresentar erro.

Se forem especificadas colunas:


Essas colunas precisam pertencer a chave primria ou a chave nica.

OBS: se no houver nenhuma das duas, a aplicao apresentar erro.

Performance e Otimizao de Banco de Dados MySQL 36


Performance e Otimizao de Banco de Dados MySQL 37
[LINEAR] HASH e [LINEAR] KEY?
Tanto com o particionamento com o HASH, quanto com o particionamento por KEY,
possvel utilizar o LINEAR antes de executar o comando (na frente de HASH ou KEY.)

Contudo, isto ir mudar o clculo padro para outro baseado em potncias de 2. Um


clculo um pouco mais complexo, para a grande maioria dos casos, pode ser
considerado desnecessrio. Portanto, tanto na KingHost, quanto na Becode, utilizado
com mais frequncia o comando com a ausncia do LINEAR.

Performance e Otimizao de Banco de Dados MySQL 38


SUBPARTICIONAMENTO
O foco do subparticionamento partir parties, sempre lembrando que s podem ser
usadas 1024 subparties.

Para utilizar o subparticionamento, preciso seguir duas restries.

1 - O PARTITION mestre precisa ser do tipo RANGE ou LIST;

2 - O subparticionamento deve ser do tipo HASH ou KEY.

Portanto, no se pode subparticionar uma tabela particionada, de forma mestre, por


HASH ou KEY.

Performance e Otimizao de Banco de Dados MySQL 39


EXEMPLO SUBPARTICIONAMENTO
Tabela Correio
Particionamento por correspondncias enviadas e subparticionado por ID do malote.

O particionamento por LIST para verificar se est enviado ou no:


Se 0, cartas a enviar; se 1, "cartas enviadas".

Ento as parties foram subparticionadas em mais 512 subparties e chegando no total


de 1024 subparties. Como subparticionamos pelo ID do malote, e estamos buscando
todas as cartas a enviar do malote 1, o MySQL j sabe que ele ter que buscar o cartas a
enviar 1.

IMPORTANTE: A dificuldade de aplicao utilizando Range Columns e Range, acontece


seguidamente com a definio de Max Value. Para evitar isso, comum no definir o Max
Value e sim o Values Lass Than.

Performance e Otimizao de Banco de Dados MySQL 40


Performance e Otimizao de Banco de Dados MySQL 41
Otimizao
de consultas
O que fazer para sua consulta ser
mais rpida?
ndices x Consultas
Os ndices devem corresponder a maioria das consultas executadas
em um sistema e vice-versa.

Se um select executado uma vez por dia, por data de matrcula,


talvez no seja um candidato interessante para ser indexado. Mas, se
todos os usurios que entram precisam ser identificados pelo "id do
usurio", ento melhor que voc tenha um ndice para este id.

O que deve ser indexado?


Campos utilizados frequentemente em buscas, pois devemos criar
ndices para o que usamos com mais frequncia. Veja alguns
exemplos na prxima pgina.

Performance e Otimizao de Banco de Dados MySQL 43


Clusula WHERE
SELECT * FROM Clientes WHERE cidade = 'Porto Alegre'

Colunas juno em JOINS


SELECT p.numero _pedido, c.nome FROM Pedidos AS.p

JOIN Cliente AS.c

ON p.cpf_cliente= c.cpf

WHERE p.estado = 'fechado'

Colunas usadas em valores mn ou mx


SELECT MAX(valor) FROM Dividas

Colunas utilizadas para GROUP BY ou ORDER BY


SELECT MAX (valor) FROM Dividas

GROUP BY id_cliente

ORDER BY data_criao

Performance e Otimizao de Banco de Dados MySQL 44


Algumas dicas extras
Procure sempre usar o menor tipo de dados possvel. Dando
preferncias queles dados que utilizem menos espao para uma
coluna. O objetivo gastar menos espao em disco e memria,
gerando ndices menores. Conseguimos assim carregar mais dados
para a tabela (em cache) e gerar mais performance.

O comando SELECT * FROM 'tabela' PROCEDURE ANALYSE


analisa a tabela em busca de campos que esto subaproveitados e
podem ser enxugados, otimizando o espao e ganhando em
performance.

Crie ndices parciais para texto, utilizando no ndice um nmero de


caracteres necessrios a criao de uma cardinalidade
razoavelmente alta. Em outras palavras, se o campo possuir 150
caracteres, indexar o campo por completo ser muito custoso para
a performance da sua base de dados.

Performance e Otimizao de Banco de Dados MySQL 45


ndices compostos
I. CPF

II. data_nascimento

III. valor-divida

Vale a pena indexar para consultas que comecem pelo primeiro campo e
busque os outros campos, em ordem. Entretanto, no proveitoso para
ndices que comeam pelo meio.

Na dvida sobre se vale a pena indexar ou no, pense no seu ndice como
um sumrio de um livro. Onde apenas as pginas mais procuradas
(captulos) so apresentadas. Em outras palavras, em um livro voc no ir
indexar cada palavra, certo? Caso contrrio, o sumrio ir perder o seu
sentido.

Performance e Otimizao de Banco de Dados MySQL 46


No bom indexar
Colunas s de exibio.
Exemplo: coluna nome de funcionrios.

Quando voc no costuma realizar buscas pelo nome de funcionrio, ento


voc no deve criar ndices para nome de funcionrios, simples.

Colunas com pouca variao de valor


Exemplo: Indexao por gnero.

No um bom candidato a indexao, pois h poucos dados e preciso o


contrrio. Quanto mais valores possveis, maior a sua cardinalidade e, portanto,
maior o aproveitamento da indexao.

Performance e Otimizao de Banco de Dados MySQL 47


Cardinalidade
Trata-se do nmero de valores possveis que esse ndice pode indexar, em
relao ao nmero de linhas desta tabela. Sendo o ndice de cardinalidade
mais alto, a chave primria o qual diz exatamente onde est uma linha.

Particionamento x Consultas
Ao utilizar particionamento, importante que todas as consultas
especifiquem o valor da coluna utilizada na expresso de
particionamento.

Caso no haja especificao, o MySQL ter que abrir todas as parties,


realizando um full scan e deixando o desempenho sobrecarregado e
lento.

Performance e Otimizao de Banco de Dados MySQL 48


JOINS
Execute somente se precisar e evite JOINS desnecessrios,
pois trata-se de um produto cartesiano muito custoso.
Entretanto, caso o Joins seja realmente necessrio, crie ndices
para facilitar a juno, mas no exagere!

IMPORTANTE: se possvel, evite indexar


buscas cujo o comando EXPLAIN mostre
"using temporary" e/ou "using filesort".
EXPLAIN Essas so operaes muito custosas e
Um timo comando do MySQL que permite explicar como muito demoradas.
ser determinada QUERY. Uma de suas funcionalidades
exibir os ndices possveis e quais j so utilizados

EXPLAIN SELECT * FROM Clientes WHERE


cidade = Porto Alegre

Performance e Otimizao de Banco de Dados MySQL 49


EXPLAIN PARTITIONS
Para otimizao do seu banco de dados, utilize o comando
EXPLAIN PARTITIONS para saber se suas consultas utilizam apenas
as parties necessrias.

EXPLAIN PARTITIONS SELECT * FROM


Clientes WHERE cidade = 'Porto Alegre'

Se a busca envolve muitas parties, revise o seu SELECT para que


especifique melhor os valores possveis das colunas de
particionamento.

Performance e Otimizao de Banco de Dados MySQL 50


Infraestrutura
Boas prticas que deram certo na
Becode e KINGHOST
Servidor BD x Servidor
Aplicao
Boa prtica: separar o servidor de banco de dados, do servidor de
aplicao.

H muitos painis onde so instalados e-mail, banco de dados, a


aplicao e php rodando tudo no mesmo servidor. Isso altamente
no recomendado. Separe os servidores.

Performance e Otimizao de Banco de Dados MySQL 52


O que utilizar nesse
servidor de dados?
SSD
- Processo sendo efetuado desde 2010 na KINGHOST, para
substituir os discos.

- Atualmente 100% dos servidores de banco de dados esto


usando discos SSD.

Essa substituio facilitou backup, aumentou SLA uptime dos


servidores e ganho de performance. Em 2010, a KINGHOST levava
cerca de 18 minutos para subir um banco de dados, hoje com os
discos SSD leva cerca de 1 a 2 minutos e o servidor volta para
produo mais rpido e com maior agilidade.

Performance e Otimizao de Banco de Dados MySQL 53


Rede Dedicada
recomendado que voc separe os servidores, mas voc ter que
ligar os dois servidores (banco de dados e aplicao)

- Dedicada para conexo com banco de dados

- Resoluo de DNS para rede interna

Monitore suas consultas


lentas
Monitores o tempo mdio que levou para executar as consultas, os
registros analisados, quantidade de execues e as consultas em si.

Controle queries com execuo acima de 2G e sem ndice, pois


voc poder decidir se elas merecem ou no ter ndices criados.

Performance e Otimizao de Banco de Dados MySQL 54


Perguntas
frequentes
1: No caso do comando select, quando defino uma
quantidade dentro do ndice isso ir valer para
todo o texto do campo ou pegar apenas os
primeiros caracteres?
Sim. Apenas os primeiros caracteres, mas se voc buscar o restante
ele ir encontrar o campo inteiro.

2: Se eu j tenho uma tabela com 100 mil registros


e quero particionar ela por data de admisso,
supomos que eu divida. o MySQL ir reestruturar a
tabela ou o particionamento s ser usado para
novos inserts?
Ele ir reestruturar a tabela. Ele far um "alter table" e criar uma
nova tabela particionada, distribuindo os registros existentes. Clone
a tabela e faa uma cpia, no edite dados em produo, assim
voc previne perdas.

Performance e Otimizao de Banco de Dados MySQL 56


Pronto para otimizar o seu Banco de
Dados MySQL!?
Esperamos que atravs deste ebook voc ganhe uma melhor viso das melhores prticas para o
desenvolvimento de aplicaes que consomem dados de um servidor MySQL. Como voc viu,
existe uma srie de aes que podem otimizar o desempenho geral dos seu banco de dados.

Para melhor compreenso e aproveitamento do contedo apresentado neste e-book


importante assistir os vdeos apresentados no decorrer do texto que expe exemplos de
otimizaes na prtica. Caso queira, voc tambm pode acompanhar o webinar completo
sobre performance e otimizao de banco de dados mysql.

Performance e Otimizao de Banco de Dados MySQL 57


Autores

Jeronimo Fagundes Nemora Dornelles


Software Engineer Instrutora na Becode e
na KingHost TargetTrust

Anda mungkin juga menyukai