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

indexar um campo de bits no MYSQL


De um modo geral, não. Um campo bi-state não acelera as consultas quando indexado porque você precisa examinar metade das linhas em média. Você deseja que suas entradas de índice sejam seletivas - uma determinada entrada no índice deve representar apenas uma pequena porcentagem dos valores possíveis (digamos, menos de 10%, de preferência em frações de porcentagem). Em seguida, o uso do índice ignora a maioria dos dados na tabela, que é o que oferece um benefício de desempenho.

Alguns DBMS suportam índices de bitmap. Eles podem ajudar, mas você ainda se depara com o problema da seletividade.

A pergunta atualizada diz que o número de valores com valor 1 será pequeno (menos de um por cento); um índice lhe dará um benefício agora?

A resposta é:

  • Para as consultas em que você especifica que o valor é 1, sim, um índice na coluna pode fornecer um benefício, desde que o otimizador realmente use o índice. Você pode precisar ajustar o DBMS para fazê-lo perceber que o índice está distorcido em favor de usá-lo com consultas onde o valor é 1; isso tende a ser específico do DBMS, mas atualizar estatísticas de várias formas é o nome do jogo, possivelmente usando dicas nas consultas SQL também. É claro que, se o otimizador nunca usa o índice, ele ainda não oferece nenhum benefício - e o otimizador pode decidir que outros índices o ajudam mais de alguma forma.

  • Para as consultas em que o valor é 0, o índice não deve ser usado. As chances são, no entanto, que o DBMS continue a manter o índice para os valores 0 também - mesmo que nunca deva usá-los. Seria um DBMS incomum que poderia ser comandado 'apenas indexe esta coluna para valores diferentes de zero', mesmo que isso seja muito benéfico.

Então - depende. Depende das consultas e depende do otimizador.

Observe também que um índice composto - em algumas outras colunas normalmente usadas e, em seguida, o campo de bits pode fornecer algum benefício. Portanto, se você quase sempre seleciona um intervalo de datas, um índice composto nas colunas de data e campo de bits (provavelmente nessa ordem) deve fornecer um bom índice.