2010-02-01 5 views
14

Ho una tabella di database mysql che desidero partizionare per data, in particolare per il mese & anno. Tuttavia, quando vengono aggiunti nuovi dati per un nuovo mese, non voglio dover aggiornare manualmente il database.partizionamento automatico del database mysql

Quando inizialmente creo il mio database, ho dati in Nov 09, Dic 09, Jan 10, ecc. Ora, quando febbraio inizia, vorrei che fosse creata automaticamente una partizione del 10 febbraio. È possibile?

+0

Non sono sicuro se questa è l'idea migliore. Ogni volta che modifichi le partizioni, dovrai sostanzialmente riscrivere l'intera tabella. Questo potrebbe richiedere un sacco di tempo e risorse. – Mchl

+0

@Mchl se hai un'idea migliore, sarei felice di sentirlo. Hai ragione, è piuttosto intenso (più di quanto vorrei), ma se viene eseguito solo una volta al mese non è poi così male, specialmente quando devo fare domande regolari come "seleziona il 3 ° giorno del mese scorso". – Benubird

+3

"Ogni volta che modifichi le partizioni, sostanzialmente riscrivi l'intera tabella": non è affatto vero. Aggiungere partizioni o rimuovere partizioni è come creare/rilasciare una tabella. Essenzialmente istantaneo. Solo la modifica di una partizione esistente * che contiene già dei dati * è potenzialmente lenta. Quindi se crei una nuova partizione per il mese prossimo prima di inserire i dati, è molto veloce. – jssebastian

risposta

3

ci sono un paio di soluzioni là fuori, se si desidera una soluzione completa, controllare questo post out on kickingtyres. È una combinazione di base di una stored procedure che gestisce l'analisi e la creazione della partizione (con alcune registrazioni!).

Tutto ciò che dovete fare è adattarlo al vostro tipo di partizione (l'esempio usa una partizione bigint) e programmare la procedura per l'esecuzione con MySQL Event Scheduler.

+0

Mi piace il concetto della stored procedure per la creazione della partizione. –

+8

collegamento kickingtyres è rotto. –

+0

Ho aggiornato il collegamento con una copia di archive.org – Benjamin

1

sì, come si potrebbe la funzionalità di partizionamento avanzato in 5.5:

http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html

+0

+1 ottimo link ... grazie –

+0

Avrei bisogno di impostare un trigger ogni mese per aggiungere una nuova partizione per quel mese? Dal momento che non voglio definire tutti i mesi/anni prima del tempo ... –

+1

@Jeff - Non ci credo, nulla è stato notato in quell'articolo comunque. Questi sono grandi miglioramenti, ma non risolveranno il tuo problema attuale ... quello che ho affrontato quando SQL Server ha aggiunto le partizioni in un primo momento, PITA di sicuro. –

1

Farò ciò che l'altro fatto (postare un link) Quick Introdunction to MySQL Partitioning

(vedere a pagina 50 per quello che ti serve - partizione per data) Edit: ho riletto il tuo post con più attenzione - se si vuole cambiare partizioni per mese perché non crei un Mysql event che lo fa

+2

Non risponde alla domanda. – Benubird

+0

I è una sugestione. Ma penso che finirai con un evento e una procedura memorizzata per fare ciò che vuoi. – cristian