gpt4 book ai didi

mysql "IN"运算符删除几行或几条查询?哪个更快?

转载 作者:行者123 更新时间:2023-11-29 04:02:42 27 4
gpt4 key购买 nike

我正在使用 MySQL。表引擎是 MyIsam

哪种方法更快?

DELETE FROM TABLE WHERE id IN (1,2,3);

DELETE FROM TABLE WHERE id = 1; 
DELETE FROM TABLE WHERE id = 2;
DELETE FROM TABLE WHERE id = 3;

id字段是PRIMARY KEY

哪个会工作得更快?

最佳答案

IN 应该更快,因为在您的第二个解决方案中,mysql 会在每次查询后更新您的索引并移动数据 block ,而在第一个查询中只会发生一次。

这里有一些关于 MySQL 的测试(对于一个有一个 int 列和 3 个 varchars 的表,填充了随机数据和 WHERE 中一列的索引...没有索引就没有意义,因为它需要更多两种情况下的时间......但 3 个查询仍然比 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>

因此,这三个查询花费的时间比 IN 的 5.25 秒多得多(7.39 秒,增加了 40%)。这是 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 ;

关于mysql "IN"运算符删除几行或几条查询?哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9366092/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com