Domanda

Ho trovato un post sui forum MySQL dal 2005 , ma niente di più recente di quello. Sulla base di ciò, non è possibile. Ma molto può cambiare in 3-4 anni.

Quello che sto cercando è un modo per avere un indice su una vista ma fare in modo che la tabella visualizzata rimanga inesistente. L'indicizzazione danneggia il processo di scrittura e questa tabella viene scritta abbastanza frequentemente (al punto in cui l'indicizzazione rallenta tutto a una scansione). Tuttavia, questa mancanza di un indice rende le mie domande dolorosamente lente.

È stato utile?

Soluzione

Non penso che MySQL supporti viste materializzate che è ciò di cui avresti bisogno, ma non ti aiuterebbe comunque in questa situazione. Se l'indice è nella vista o nella tabella sottostante, dovrebbe essere scritto e aggiornato ad un certo punto durante un aggiornamento della tabella sottostante, quindi causerebbe comunque problemi di velocità di scrittura.

La tua scommessa migliore sarebbe probabilmente quella di creare tabelle di riepilogo che vengano aggiornate periodicamente.

Altri suggerimenti

Hai preso in considerazione l'astrazione dei dati di elaborazione delle tue transazioni dai dati di elaborazione analitici in modo che entrambi possano essere specializzati per soddisfare le loro esigenze specifiche?

L'idea di base è che hai una versione dei dati che viene regolarmente modificata, questo sarebbe il lato dell'elaborazione della transazione e richiede una forte normalizzazione e indici leggeri in modo che le operazioni di scrittura siano veloci. Una seconda versione dei dati è strutturata per l'elaborazione analitica e tende a essere meno normalizzata e maggiormente indicizzata per operazioni di reporting rapido.

I dati strutturati attorno all'elaborazione analitica sono generalmente costruiti attorno alla metodologia del cubo del data warehousing, essendo composti da tabelle dei fatti che rappresentano i lati del cubo e tabelle delle dimensioni che rappresentano i bordi del cubo.

Flexviews supporta visualizzazioni materializzate in MySQL monitorando le modifiche alle tabelle sottostanti e aggiornando la tabella che funziona come una visione materializzata. Questo approccio significa che SQL supportato dalla vista è un po 'limitato (poiché le routine di registrazione delle modifiche devono capire quali tabelle dovrebbe tenere traccia delle modifiche), ma per quanto ne so questo è il più vicino che puoi ottenere alle viste materializzate in MySQL .

Vuoi solo una vista indicizzata? È improbabile che scrivere su una tabella con un solo indice sia così dirompente. Non esiste una chiave primaria?

Se ogni record è grande, potresti migliorare le prestazioni scoprendo come accorciarlo. Oppure accorcia la lunghezza dell'indice di cui hai bisogno.

Se si tratta di una tabella di sola scrittura (ovvero non è necessario eseguire aggiornamenti), può essere mortale in MySQL iniziare a archiviarlo o eliminare in altro modo i record (e le chiavi dell'indice), richiedendo che l'indice inizi a riempire (riutilizzo) slot da chiavi cancellate, anziché semplicemente aggiungere nuovi valori di indice. Controintuitivo, ma stai meglio con un tavolo più grande in questo caso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top