Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Velocidade de consulta com base na ordem das colunas


A resposta é sim, isso importa e pode importar muito, mas geralmente não muito.

Todas as E/S são feitas em nível de página (normalmente 2K ou 4K, dependendo do seu sistema operacional). Os dados de coluna para linhas são armazenados um ao lado do outro, exceto quando a página fica cheia, caso em que os dados são gravados na outra página (geralmente a próxima).

Quanto maior o espaço de dados em disco necessário para colunas entre (com base na definição da tabela) as colunas selecionadas, maior a chance de que os dados das colunas selecionadas (às vezes) estejam em páginas diferentes. Estar em uma página diferente pode resultar em uma operação de E/S extra (se não houver outras linhas selecionadas na outra página). Na pior das hipóteses, cada coluna selecionada pode estar em uma página diferente.

Aqui está um exemplo:
create table bad_layout (
num1 int,
large1 varchar(4000),
num2 int,
large2 varchar(4000),
num3 int,
large3 varchar(4000)
);

create table better_layout (
num1 int,
num2 int,
num3 int,
large1 varchar(4000),
large2 varchar(4000),
large3 varchar(4000)
);

Comparando:selecione num1, num2, num3 de bad_layout; selecione num1, num2, num3 de better_layout;

Como para bad_layout cada coluna numérica basicamente estará em uma página diferente, cada linha exigirá 3 operações de E/S. Por outro lado, para better_layout num, as colunas geralmente estarão na mesma página.

A consulta bad_layout provavelmente levará cerca de 3 vezes mais para ser executada.

Um bom layout de tabela pode fazer uma grande diferença no desempenho da consulta. Você deve tentar manter as colunas que normalmente são selecionadas juntas o mais próximo possível umas das outras no layout da tabela.