Preciso acompanhar os itens excluídos para as necessidades de sincronização do cliente.
Em geral, é melhor adicionar uma tabela de marca de exclusão e um gatilho que rastreie quando uma linha foi excluída do banco de dados do servidor - basicamente adicionando uma nova linha à tabela de marca de exclusão com os dados do item excluído - ou manter os itens no tabela original e sinalize -as como excluídas, geralmente com uma coluna do tipo bit, para indicar que uma linha foi excluída e outra coluna para rastrear quando a exclusão ocorreu?
Talvez você deva combinar os dois métodos de propósito. Por quê ???
Vamos usar essa tabela (dialeto MySQL)
Observe que, com exceção da PRIMARY KEY, todos os índices que você cria devem ser precedidos pelo
deleted
sinalizador e terminar com oid
.Vamos criar a tabela de marca para exclusão
Se sua tabela já tiver um
deleted
sinalizador, você poderá preencher a tabela tommstoneOK, agora os dados e a lápide estão preparados. Como você executa exclusões?
Digamos que você esteja excluindo todas as pessoas no CEP 07305. Você executaria o seguinte:
OK, isso parece um monte de sobrecarga de qualquer maneira que você olha para ele.
Agora, você deseja ver todos os dados excluídos? Aqui estão duas maneiras diferentes:
SELECT * FROM mydata WHERE deleted=1;
SELECT B.* FROM mytomb A INNER JOIN mydata B USING (id);
Se o número de IDs no mytomb for maior que 5% da contagem de linhas de mydata, será uma verificação completa da tabela. Caso contrário, uma varredura de índice com uma pesquisa para cada linha. Observe quaisquer benchmarks nesses aspectos. Pesquise os planos de explicação.
Agora, você quer ver todas as pessoas no CEP 07304? Aqui estão duas maneiras diferentes:
SELECT * FROM mydata WHERE deleted=1 AND zipcode='07304';
SELECT A.* FROM mydata A LEFT JOIN mytomb B USING (id) WHERE B.id IS NULL AND A.zipcode='07304'
Que tal exclusões em massa? Aqui estão duas maneiras diferentes:
DELETE FROM mydata WHERE deleted=1;
DELETE B.* FROM mytomb A INNER JOIN mydata B USING (id); DELETE FROM mytomb;
CONCLUSÃO
Agora, não estou dizendo para manter os dois métodos. Fazer isso ao longo do tempo revela qual método é mais rápido em termos de operacionalidade geral. Você deve decidir quais parâmetros de referência para consultar dados ativos, consultar dados excluídos e exclusões em massa que funcionam melhor para você.
fonte