sql >> Base de Datos >  >> RDS >> Mysql

Cómo verificar en tiempo real si se agregó una nueva fila a la tabla MySQL

Si su tabla es MyISAM, me apegaría a su idea inicial. Obtener el recuento de filas de una tabla MyISAM es instantáneo. Solo toma la lectura de un solo valor ya que MyISAM mantiene el conteo de filas en todo momento.

Con InnoDB, este enfoque aún puede ser aceptable. Asumiendo car_table.id es clave principal, SELECT COUNT(id) FROM car_table solo requiere un escaneo de índice, que es muy rápido. Puede mejorar esta idea agregando otra columna booleana indexada a su tabla:

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

El valor predeterminado garantiza que se insertarán autos nuevos con esta bandera establecida en 0 sin modificar la declaración de inserción. Entonces:

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;

De esta manera, solo escanea una cantidad muy pequeña de entradas de índice en cada sondeo.

Un enfoque más avanzado consiste en agregar ID de automóviles recién creados en una tabla lateral, a través de un disparador. Esta mesa auxiliar se escanea de vez en cuando, sin bloquear la mesa principal y sin alterar su estructura. Simplemente TRUNCATE esta mesa auxiliar después de cada votación.

Finalmente, existe la opción de activar un UDF, como sugiere Panagiotis, pero esto parece ser una exageración en la mayoría de las situaciones.