IN devrait être plus rapide, car mysql mettra à jour vos index et déplacera les blocs de données après chaque requête dans votre deuxième solution, alors que cela n'arrivera qu'une seule fois avec la première requête.
Et voici quelques tests sur MySQL (pour une table ayant une colonne int et 3 varchars, peuplés avec des données aléatoires et sur l'index sur une colonne dans le WHERE ... n'a pas de sens sans index, car il faut beaucoup plus de temps dans les deux cas ... mais encore un peu plus lent avec 3 requêtes que IN).
mysql> call prepare_data();
Query OK, 1 row affected (34.25 sec)
mysql> delete from t1 where trt in (5, 6, 7);
Query OK, 300049 rows affected (5.25 sec)
mysql> call prepare_data();
Query OK, 1 row affected (35.18 sec)
mysql> delete from t1 where trt=5;delete from t1 where trt=6;delete from t1 where trt=7;
Query OK, 99961 rows affected (2.25 sec)
Query OK, 99842 rows affected (2.38 sec)
Query OK, 99558 rows affected (2.69 sec)
mysql>
Ainsi, ces trois requêtes, ont beaucoup plus de temps 7.39s vs 5.25s pour IN, ce qui est une augmentation de 40%). Voici la procédure prepare_data:
DELIMITER $$
CREATE PROCEDURE prepare_data()
BEGIN
DECLARE i INT DEFAULT 0;
TRUNCATE TABLE t1;
WHILE i < 1000000 DO
INSERT INTO t1 (a, b, c, trt) VALUES ('fasdfadsf', 'asdfasdfa', 'asdfasdf', FLOOR(1 + RAND() *10));
SET i = i + 1;
END WHILE;
END $$
DELIMITER ;
Pourquoi ne pas simplement essayer? –
Chaque fois que vous voulez demander _is x plus vite que y_, la première chose à faire est de la tester par vous-même! –
Définitivement en utilisant IN. –