作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!