sql >> Databasteknik >  >> RDS >> Mysql

Hur man kontrollerar i realtid om en ny rad har lagts till i MySQL-tabellen

Om ditt bord är MyISAM, skulle jag hålla fast vid din ursprungliga idé. Att få radräkningen från en MyISAM-tabell är omedelbar. Det krävs bara avläsning av ett enda värde eftersom MyISAM upprätthåller radantalet hela tiden.

Med InnoDB kan detta tillvägagångssätt fortfarande vara acceptabelt. Förutsatt car_table.id är primärnyckel, SELECT COUNT(id) FROM car_table kräver bara en indexskanning, vilket är mycket snabbt. Du kan förbättra denna idé genom att lägga till ytterligare en indexerad boolesk kolumn i tabellen:

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

Standardvärdet säkerställer att nya bilar kommer att infogas med denna flagga inställd på 0 utan att infogningssatsen ändras. Sedan:

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;

På så sätt skannar du bara ett mycket litet antal indexposter vid varje omröstning.

Ett mer avancerat tillvägagångssätt består i att lägga till nyskapade bil-ID:n i ett sidobord, genom en trigger. Detta sidobord skannas då och då, utan att låsa huvudbordet och utan att ändra dess struktur. Helt enkelt TRUNCATE denna sidotabell efter varje omröstning.

Slutligen finns det möjlighet att utlösa en UDF, som föreslagits av Panagiotis, men detta verkar vara en överdrift i de flesta situationer.



  1. SQL JOIN i PostgreSQL - annan exekveringsplan i WHERE-satsen än i ON-satsen

  2. Kombinera två bord med sql JOIN?

  3. Hur kan jag visa bilder lagrade i en MySQL-databas?

  4. Byt namn på en användardefinierad datatyp i SQL Server (T-SQL)