Per offrirti un'esperienza di navigazione sempre migliore, questo sito utilizza cookie propri e di terze parti, partner selezionati. I cookie di terze parti potranno anche essere di profilazione.
Le tue preferenze si applicheranno solo a questo sito web. Puoi modificare le tue preferenze in qualsiasi momento ritornando su questo sito o consultando la nostra informativa sulla riservatezza.
E' possibile rivedere la nostra privacy policy cliccando qui e la nostra cookie policy cliccando qui.
Per modificare le impostazioni dei cookies clicca qui
  • seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Come modificare una partizione MySQL

di :: 08 agosto 2018
Come modificare una partizione MySQL

In un articolo precedente ci siamo occupati di come partizionare una tabella MySQL, e quali benifici possiamo ottenere da questo partizionamento.

Oggi vediamo come manipolare una partizione, cioè come modificarla, eliminarla o svuotarla dai suoi records, utilizzando il comando ALTER TABLE.

Modifica di una partizione RANGE o LIST

In una tabella partizionata by RANGE o LIST è possibile cancellare o svuotare una partizione, con tutti i records in esso contenuti.

Ripartiamo dall'esempio visto nell'articolo precedente, e cioè da questa tabella partizionata per RANGE

CREATE TABLE IF NOT EXISTS `stat` (
  `stat_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `stat_data` datetime DEFAULT NULL,
  `stat_ip` varchar(22) DEFAULT NULL,
  PRIMARY KEY (`stat_id`,`stat_data`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

  PARTITION BY RANGE(YEAR(stat_data)) (
    PARTITION p0 VALUES LESS THAN (2014) ENGINE = MyISAM,
    PARTITION p1 VALUES LESS THAN (2015) ENGINE = MyISAM,
    PARTITION p2 VALUES LESS THAN (2016) ENGINE = MyISAM,
    PARTITION p3 VALUES LESS THAN (2017) ENGINE = MyISAM,
    PARTITION p4 VALUES LESS THAN MAXVALUE ENGINE = MyISAM
  )
;

Se, ad esempio, non ci interessano più i dati salvati nella nostra tabella nell'anno 2014, possiamo svuotare la partizione p0 utilizzando TRUNCATE, in questo modo

ALTER TABLE stat TRUNCATE PARTITION p0;

Andiamo adesso a verificare le partizioni e i records contentuti

SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='stat';
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p0             |          0 |
| p1             |     145653 |
| p2             |    1896542 |
| p3             |      23464 |
+----------------+------------+

Come possiamo vedere la partizione p0 non contiene più records.

Questo risultato è il medesimo che avrei ottenuto utilizzando il consueto comando DELETE

DELETE FROM stat WHERE YEAR(stat_data) < 2015;

Utilizzando TRUNCATE sulla specifica partizione, otterremo una processo di cancellazione nettamente più veloce rispetto all'utilizzo di DELETE.

Se invece la partizione p0 non ci interessa più, e quindi vogliamo eliminarla, utilizziamo DROP

ALTER TABLE stat DROP PARTITION p0;

Verifichiamo adesso le nostre partizioni:

SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='stat';
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p1             |     145653 |
| p2             |    1896542 |
| p3             |      23464 |
+----------------+------------+

Come possiamo vedere la partizione p0 non è più presente.

Possiamo anche aggiungere una nuova partizione, utilizzando il comando ALTER TABLE .... ADD PARTITION, ma è possibile farlo SOLO dopo l'ultima partizione creata, nel nostro esempio quindi dopo la partizione p3, in questo modo:

ALTER TABLE stat ADD PARTITION (PARTITION p4 VALUES LESS THAN (2019));

Andiamo a verificare le partizioni adesso esistenti:

SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME='stat';
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p1             |     145653 |
| p2             |    1896542 |
| p3             |      23464 |
| p4             |          0 |
+----------------+------------+

Non è quindi possibile inserire una partizione tra le partizioni già esistenti, oppure prima della prima partizione (nel nostro esempio p1).

Ad esempio provate questo ALTER TABLE

ALTER TABLE stat ADD PARTITION (PARTITION p0 VALUES LESS THAN (2015));

MySQL restituirà un errore "VALUES LESS THAN value must be strictly increasing for each partition".

Modifica di una partizione KEY o HASH

Vediamo adesso quali operazioni possiamo effettuare in una tabella partizionata per HASH o KEY.

Consideriamo una tabella partizionata, ad esempio, per HASH, con 12 partizioni

CREATE TABLE clienti (
    clienti_id INT,
    clienti_cognome VARCHAR(30),
    clienti_nome VARCHAR(30),
    clienti_data DATE
)
PARTITION BY HASH( MONTH(clienti_data) )
PARTITIONS 12;

Possiamo modificare il numero di partizioni, ad esempio, riducendole a 5, utilizzando il comando ALTER TABLE .... COALESCE PARTITION in questo modo:

ALTER TABLE clienti COALESCE PARTITION 5;

Se invece vogliamo aumentare il numero di partizioni , ad esempio a 6, utilizziamo un ALTER TABLE .... ADD PARTITION in questo modo:

ALTER TABLE clienti ADD PARTITION PARTITIONS 6;

Approfondimenti

 
 
 
 
pay per script

Hai bisogno di uno script PHP personalizzato, di una particolare configurazione su Linux, di una gestione dei tuoi server Linux, o di una consulenza per il tuo progetto?

x

ATTENZIONE