MySQL e cardinalidade do índice

1

Eu tenho uma tabela MyISAM em um banco de dados MySQL em um servidor Ubuntu 10.04 com 256MB de RAM. O tamanho máximo do pacote é 32mb. A tabela tem 150.000 linhas.

A tabela possui três colunas, duas das quais são do tipo TEXTO. Eu crio um índice FULLTEXT em ambos; um índice tem cardinalidade igual ao número de linhas na tabela, o outro apenas um terço.

Por que isso?

Um índice de cardinalidade baixa implica que MATCH () AGAINST () perderá hits? (Parece que sim.) Em caso afirmativo, posso aumentar um limite de memória em algum lugar para aumentar a cardinalidade do meu índice?

    
por SK9 08.09.2011 / 10:05

2 respostas

1

Se você acha que algo está errado, use o utilitário myisam_ftdump para examinar os índices. A cardinalidade depende de quantas palavras diferentes existem nos campos TEXTO.

Você não especificou o conteúdo dos campos, então a resposta não é única.

Além disso, se você não criou um arquivo /etc/mystopwords , o MySQL usa sua lista interna de palavras irrelevantes. Essa lista depende do agrupamento e pode dar resultados falsos se o agrupamento de colunas for diferente do padrão.

Até o tipo de consulta pode gerar resultados estranhos.

Em conclusão, a cardinalidade não é um problema até você saber que algo nos índices está faltando.

    
por 08.09.2011 / 10:27
1

can I increase a memory limit some where to increase the cardinality of my index

Eh? Não. A cardinalidade é o número de valores únicos nos dados dividido pelo número total de valores na tabela - alterar a quantidade de memória disponível não alterará seus dados.

Como AndrewQ diz, usar stopwords para ser mais seletivo sobre o que é indexado pode ter muito impacto na métrica de cardinalidade - e, portanto, na otimização de consultas, no entanto a indexação FULLTEXT é um instrumento muito contundente para pesquisa de texto. p>

Certamente não há muita memória aqui (suponho que essa seja uma máquina virtual) que afetará o desempenho geral.

    
por 08.09.2011 / 10:56