insert ignore
är den bättre metoden av flera anledningar.
När det gäller prestanda är det bara en fråga som kompileras och körs, snarare än två. Detta sparar omkostnader för att flytta saker in och ut ur databasen.
När det gäller underhåll är det mer underhållbart att bara ha en fråga, eftersom logiken finns på ett ställe. Om du har lagt till en where
sats, till exempel, skulle du vara mer benägen att missa att lägga till den i två separata frågor.
När det gäller noggrannhet bör endast en fråga inte ha några (eller åtminstone många färre) möjligheter för tävlingsförhållanden. Om en rad infogas mellan select
och insert
, då får du fortfarande ett felmeddelande.
Men bättre än insert ignore
är insert . . . on duplicate key update
. Det senare undviker bara felet för dupliceringsproblem. insert ignore
kanske ignorerar fel som du faktiskt bryr dig om.
Förresten, du bör i alla fall leta efter fel från uttalandet.