Pergunta

uma postagem no fórum do MySQL a partir de 2005 , mas nada mais recente do que isso. Com base nisso, não é possível. Mas muita coisa pode mudar em 3-4 anos.

O que eu estou procurando é uma maneira de ter um índice de vista, mas tem a tabela que é visto permanecem não indexados. Indexação fere o processo de escrita e esta tabela é escrito para com bastante freqüência (ao ponto onde tudo indexação retarda a um rastejamento). No entanto, esta falta de um índice faz com que minhas consultas dolorosamente lento.

Foi útil?

Solução

Eu não acho que o MySQL suporta visualizações materializadas que é o que você precisa, mas não iria ajudá-lo nesta situação de qualquer maneira. Se o índice está na vista ou na tabela subjacente, seria necessário a ser escrito e atualizado em algum momento durante uma atualização da tabela subjacente, de modo que seria ainda causa os problemas de velocidade de escrita.

Sua melhor aposta seria provavelmente para criar tabelas de resumo que são atualizados periodicamente.

Outras dicas

Você considerou abstrair sua transação processar dados de seus dados de processamento analítico de modo que ambos podem ser especializados para atender às suas necessidades específicas?

A idéia básica é que você tem uma versão dos dados que são regularmente modificados, este seria o lado de processamento de transações e requer a normalização pesado e índices luz para que as operações de gravação são rápidos. Uma segunda versão dos dados é estruturado para processamento analítico e tende a ser menos normalizada e mais fortemente indexados para operações de relatórios rápidos.

Os dados estruturado em torno de processamento analítico é geralmente construída em torno da metodologia de cubo de armazenamento de dados, sendo composto de tabelas de fatos que representam os lados das tabelas de cubo e dimensão que representam as arestas do cubo.

Flexviews suportes visualizações materializadas no MySQL, acompanhando alterações nas tabelas subjacentes e atualizar a tabela que funciona como uma visão materializada. Este meio de abordagem que o SQL suportados pelo ponto de vista é um pouco restrito (como a mudança de rotinas de registro tem que descobrir quais tabelas deve seguir para alterações), mas tanto quanto eu sei que isso é o mais próximo que você pode chegar a visões materializadas no MySQL .

Você só querem uma exibição indexada? É improvável que escrever a uma tabela com apenas um índice seria que perturbador. Não há nenhuma chave primária?

Se cada registro é grande, você pode melhorar o desempenho, para descobrir como reduzi-lo. Ou encurtar o comprimento do índice que você precisa.

Se esta é uma tabela somente para gravação (ou seja, você não precisa fazer atualizações), que pode ser mortal em MySQL para começar arquivá-lo, ou de outra forma exclusão de registros (e chaves de índice), exigindo o índice para iniciar o enchimento (reutilização) ranhuras de chaves excluídos, em vez de apenas acrescentar novos valores de índice. Contra-intuitivo, mas você é melhor fora com uma mesa maior neste caso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top