2012-10-17 9 views
11

Sono immersioni sempre più in profondità Caratteristiche MySQL, e il prossimo che sto provando è partizioni della tabellaPartizioni e UPDATE

C'è fondamentalmente solo una domanda su di loro, in cui non riuscivo a trovare una risposta chiara yet:

Se AGGIORNA una riga, la riga verrà spostata automaticamente in un'altra partizione, se vengono soddisfatte le condizioni della partizione di un'altra partizione? (se per esempio le partizioni sono suddivise per regione e la regione cambia da regione A a regione B)

E se ciò non avviene automaticamente, cosa devo fare per spostare la riga da partizione A nella partizione B? (e ci sarà una performance colpendo così?)

Quello che vorrei fare è spostare le informazioni "cancellate" (una bandiera) in una partizione separata della tabella, dato che raramente verranno chiamate. Questa sarebbe di solito una buona idea o sarebbe meglio lasciare semplicemente tutto nello stesso tavolo (probabilmente un giorno enorme - multiplo di milioni di righe)?

risposta

17

Deve spostarli in aggiornamento. Se così non fosse, non funzionerebbe bene. MySQL dovrebbe fondamentalmente eseguire la scansione di tutte le partizioni su ogni query in quanto non poteva sapere dove erano archiviati i record.

ho fatto anche alcuni test (su MySQL 5.6 come questa è la prima versione in cui è possibile specificare quali partions per interrogare)

CREATE TABLE test (
    id int 
) 
PARTITION BY RANGE (id) (
    PARTITION p1 VALUES LESS THAN (1000), 
    PARTITION p2 VALUES LESS THAN MAXVALUE); 

INSERT INTO test VALUES (1); -- now on partition p1 

SELECT * FROM test PARTITION(p1); 
+------+ 
| id | 
+------+ 
| 1 | 
+------+ 
1 row in set (0.00 sec) 

SELECT * FROM test PARTITION(p2); 
Empty set (0.00 sec) 

UPDATE test SET id = 1001; -- now on partition p2 

SELECT * FROM test PARTITION (p1); 
Empty set (0.00 sec) 

SELECT * FROM test PARTITION (p2); 
+------+ 
| id | 
+------+ 
| 1001 | 
+------+ 
1 row in set (0.00 sec) 

E 'chiaro che immediatamente dopo l'aggiornamento sapere che la riga ora è in partizione p2.

+1

Speravo che funzionasse in questo modo, grazie! Non ero sicuro perché non potevo vederlo menzionato nei documenti. – Katai