- Como Criar Um Site, Blog – WebMaster.pt - http://www.webmaster.pt -

MySQL – Otimização Criando Índices

Tweet [3]

As pessoas costumam dizer que quem trabalha com programação e banco de dados aprende algo novo a cada dia!

Posso dizer que isso é uma verdade, já que a informática nos surpreende a cada dia.

Existem vários recursos que ajudam os Programadores a terem soluções mais rápidas e poderosas. Uma delas é a criação de índices em suas tabelas.

Trabalhando Com Índices

Imagine uma base de dados pequena e com poucos registros. Seu desempenho é ótimo, correto?

Vamos ser mais claros?

Digamos que você tenha uma tabela de clientes / usuários e nesta tabela existam de 5 a 10 registros.

Ao efetuar uma busca, as informações virão rapidamente em tela!

Agora pense… Você já imaginou fazer uma busca na mesma base de dados tendo ela uma grande quantidade de registros?

Bem… o problema não é a quantidade de registros e sim a forma que os Programadores efetuam suas consultas!

Abaixo vamos simular alguns exemplos onde você poderá conhecer melhor sobre este assunto.

Criando As Tabelas Na Base De Dados

Antes de partirmos para a programação, abra o ficheiro script-sql.txt (disponível em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.

Em nossas matérias de MySQL utilizamos como padrão o MySQLFront. Caso você queira utilizar este programa, clique em SQL Editor e cole o conteúdo do script (conforme imagem abaixo).

CRIANDO A TABELA

Veja abaixo o código a ser inserido:


----- CRIA A TABELA TBL_NUMEROS -----

CREATE TABLE `tbl_numeros` (
  `id_numero` int(11) NOT NULL auto_increment,
  `numero` char(10) default NULL,
  PRIMARY KEY  (`id_numero`)
);

----- INSERE CONTEÚDO NA TBL_NUMEROS -----

INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (1,1);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (2,2);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (3,3);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (4,4);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (5,5);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (6,6);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (7,7);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (8,8);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (9,9);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (10,10);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (11,11);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (12,12);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (13,13);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (14,14);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (15,15);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (16,16);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (17,17);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (18,18);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (19,19);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (20,20);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (21,21);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (22,22);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (23,23);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (24,24);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (25,25);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (26,26);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (27,27);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (28,28);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (29,29);
INSERT INTO `tbl_numeros` (`id_numero`,`numero`) VALUES (30,30);

Após criar a tabela e inserir as informações na base de dados, vamos partir para os testes!

Usando O Select Comum

Suponhamos que você tenha uma tabela com números que vão de 1 a 30. Você podería usar a consulta a seguir (veja o código e imagem a seguir):



SELECT numero FROM tbl_numeros WHERE numero = '25';

Usando o Select Comum

Se você verificar bem, verá que a resposta do “Execution Time” foi de “0.09″!

Isso acontece porque até encontrar o número “25″ (conforme o select acima) o MySQL usará a lógica a seguir:

É ruim ler registro por registro, não? Se o MySQL pudesse responder, diría a mesma coisa :) Vamos conhecer agora uma forma mais prática de se trabalhar?

Criando O Índice

No exemplo abaixo, vamos usar um índice para o campo número em “tbl_numeros”.

Antes de usar a solução, vamos criar junto ao MySQL este índice!

Siga a sintaxe abaixo descrita (conforme código e imagem a seguir):



----- CRIANDO UMA INDEX PARA O CAMPO NUMERO EM TBL_NUMEROS -----

CREATE INDEX index_numero ON tbl_numeros (numero(10))

CRIANDO O ÍNDEX

Quem trabalha com SQL não terá dificuldades, já que no MSSQL trabalhamos com triggers (que usam estrutura bem próximas). Em todo caso, não há dificuldade… É só seguir a estrutura acima!

Efetuando O Select Otimizado

Abaixo efetuaremos um select otimizado e veremos também seu tempo de execução (conforme código e imagem a seguir):



----- SELECIONANDO A INDEX DA TABELA TBL_NUMEROS -----

SELECT numero FROM tbl_numeros USE INDEX (index_numero) WHERE numero = '25';

Efetuando o Select Otimizado

Observe que em “Execution Time” diferente da primeira opção, o tempo é de “0.02″.

Como ele fuciona?

Na prática o sistema fará uma média entre o primeiro e último registro e trará em tela as informações solicitadas!

Claro, não é exatamente desta forma que funciona, mas… como programador, “imagino” que ele busque as informações pulando registros.

Isso dá uma vantagem muito maior, já que ele trás os dados em tela em tempo record (menos da metade do tempo).

Bem… ficamos por aqui com mais esta matéria.

Caso você queira conhecer mais sobre esta matéria, poste suas dúvidas e observações!

Estaremos falando mais sobre este e outros assuntos nas próximas edições.

ficheiros.zip [4]

Tweet [3]
Be Sociable, Share!
  • [9]
  • [10]
  • [11]
  • [12]
  • [13]