sql >> Database >  >> RDS >> Mysql

Hoe u in realtime kunt controleren of er een nieuwe rij is toegevoegd aan de MySQL-tabel

Als uw tafel MyISAM is, zou ik bij uw oorspronkelijke idee blijven. Het verkrijgen van het aantal rijen uit een MyISAM-tabel is direct. Er hoeft maar één enkele waarde te worden gelezen, omdat MyISAM het aantal rijen altijd bijhoudt.

Met InnoDB kan deze aanpak nog steeds acceptabel zijn. Ervan uitgaande dat car_table.id is primaire sleutel, SELECT COUNT(id) FROM car_table vereist alleen een indexscan, wat erg snel is. U kunt dit idee verbeteren door een andere geïndexeerde booleaanse kolom aan uw tabel toe te voegen:

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

De standaardwaarde zorgt ervoor dat nieuwe auto's worden ingevoegd met deze vlag ingesteld op 0 zonder de invoegopdracht te wijzigen. Dan:

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;

Op deze manier scant u slechts een zeer klein aantal indexitems bij elke peiling.

Een meer geavanceerde benadering bestaat uit het toevoegen van nieuw gemaakte auto-ID's aan een bijzettafel, via een trigger. Deze bijzettafel wordt zo nu en dan gescand, zonder de hoofdtafel te vergrendelen en zonder de structuur te veranderen. Gewoon TRUNCATE deze bijzettafel na elke peiling.

Ten slotte is er de mogelijkheid om een ​​UDF te activeren, zoals voorgesteld door Panagiotis, maar dit lijkt in de meeste situaties een overkill te zijn.



  1. psql:FATAL:database <gebruiker> bestaat niet

  2. PostgreSQL Geen Auto Increment-functie?

  3. Zijn er goede PostgreSQL-clients voor linux?

  4. Hoe de lekkage van de databaseverbinding in de Java EE-toepassing te controleren?