Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como verificar em tempo real se uma nova linha foi adicionada à tabela MySQL


Se sua mesa for MyISAM, eu seguiria sua ideia inicial. Obter a contagem de linhas de uma tabela MyISAM é instantâneo. Leva apenas a leitura de um único valor, pois o MyISAM mantém a contagem de linhas o tempo todo.

Com o InnoDB, essa abordagem ainda pode ser aceitável. Assumindo car_table.id é a chave primária, SELECT COUNT(id) FROM car_table requer apenas uma verificação de índice, que é muito rápida. Você pode melhorar essa ideia adicionando outra coluna booleana indexada à sua tabela:
ALTER car_table ADD COLUMN checked BOOLEAN NOT NULL DEFAULT 0, ADD INDEX (checked);

O valor padrão garante que novos carros sejam inseridos com esse sinalizador definido como 0 sem modificar a instrução de inserção. Então:
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;

Dessa forma, você verifica apenas um número muito pequeno de entradas de índice em cada pesquisa.

Uma abordagem mais avançada consiste em adicionar IDs de carros recém-criados em uma tabela lateral, por meio de um gatilho. Esta mesa lateral é escaneada de vez em quando, sem travar a mesa principal e sem alterar sua estrutura. Simplesmente TRUNCATE esta mesa lateral após cada votação.

Finalmente, há a opção de acionar uma UDF, como sugerido por Panagiotis, mas isso parece ser um exagero na maioria das situações.