Mysql
 sql >> Database >  >> RDS >> Mysql

Come controllare in tempo reale se è stata aggiunta una nuova riga alla tabella MySQL

Se il tuo tavolo è MyISAM, mi atterrerei alla tua idea iniziale. Ottenere il conteggio delle righe da una tabella MyISAM è istantaneo. Richiede solo la lettura di un singolo valore poiché MyISAM mantiene il conteggio delle righe in ogni momento.

Con InnoDB, questo approccio può ancora essere accettabile. Supponendo car_table.id è la chiave primaria, SELECT COUNT(id) FROM car_table richiede solo una scansione dell'indice, che è molto veloce. Puoi migliorare questa idea aggiungendo un'altra colonna booleana indicizzata alla tua tabella:

ALTER car_table ADD COLUMN checked BOOLEAN NOT NULL DEFAULT 0, ADD INDEX (checked);

Il valore predefinito garantisce che le nuove auto verranno inserite con questo flag impostato su 0 senza modificare l'istruzione di inserimento. Quindi:

BEGIN TRANSACTION; -- make sure nobody interferes
SELECT COUNT(checked) FROM car_table WHERE checked = FALSE FOR UPDATE; -- this gets you the number of new, unchecked cars
UPDATE car_table SET checked = TRUE WHERE checked = FALSE; -- mark these cars as checked
COMMIT;

In questo modo, esegui la scansione solo di un numero molto piccolo di voci di indice a ogni polling.

Un approccio più avanzato consiste nell'aggiungere gli ID auto appena creati in un tavolino laterale, tramite un trigger. Questo tavolino laterale viene scansionato di tanto in tanto, senza bloccare il tavolino principale e senza alterarne la struttura. Semplicemente TRUNCATE questo tavolino dopo ogni sondaggio.

Infine, c'è la possibilità di attivare un UDF, come suggerito da Panagiotis, ma questo sembra essere eccessivo nella maggior parte delle situazioni.