paolo@bimodesign.com | +34 608 61 64 10

DB Relational

        

MySQL - Gestione NULL nelle partition

Occorre fare particolare attenzione quando si creano partizioni su campi che si prevede possano contenere valore nulli. Prendendo spunto da questo link della documentazione ufficiale, nel quale potete trovare i relativi esempi, riporto lo schema relativo ai 4 tipi di partizioni consentiti in MySQL

- RANGE partition: In tutti i casi, il valore NULL verra' archiviato nella prima partizione
- LIST partition: Se non viene esplicitamente indicato come valore della lista, nel caso di inserimento di un valore NULL, MySQL generera' un errore e non permettera' di inserire tale record. Quindi, e' preferibile creare una partition di tipo LIST includendo gia' la possibilita' della presenza di valori NULL, ovvero:

mysql> CREATE TABLE ts2 (
    ->     c1 INT,
    ->     c2 VARCHAR(20)
    -> )
    -> PARTITION BY LIST(c1) (
    ->     PARTITION p0 VALUES IN (0, 3, 6),
    ->     PARTITION p1 VALUES IN (1, 4, 7),
    ->     PARTITION p2 VALUES IN (2, 5, 8),
    ->     PARTITION p3 VALUES IN (NULL)
    -> );

oppure

mysql> CREATE TABLE ts3 (
    ->     c1 INT,
    ->     c2 VARCHAR(20)
    -> )
    -> PARTITION BY LIST(c1) (
    ->     PARTITION p0 VALUES IN (0, 3, 6),
    ->     PARTITION p1 VALUES IN (1, 4, 7, NULL),
    ->     PARTITION p2 VALUES IN (2, 5, 8)
    -> );

- HASH e KEY partition: viene distribuito nella relativa partizine come fosse un valore uguale a 0. Ovvero, inserendo 0 o NULL, entrambi i record verranno salvati nella stessa partizione. Chiaramente i valori non verranno alterati
Infine, ricordo che per visualizzare la distribuzione dei dati nelle partizioni, si utilizza questa istruzione SQL :

mysql> SELECT TABLE_NAME, 
              PARTITION_NAME, 
              TABLE_ROWS, 
              AVG_ROW_LENGTH, 
              DATA_LENGTH
         FROM INFORMATION_SCHEMA.PARTITIONS
        WHERE TABLE_SCHEMA = 'p' 
          AND TABLE_NAME ='nameTable';