对要删除的行执行选择查询是否有助于运行删除查询性能?例如,如果我这样做:
select * from t1 where test_id = x -- will look for 100,000 rows
然后运行这个:
delete from t1 where test_id = x
我认为这会有所帮助,因为选择查询不会将数据放入 InnoDB 缓冲池吗?我还没有测试过它,因为我不确定如何正确地测试它。
对要删除的行执行选择查询是否有助于运行删除查询性能?例如,如果我这样做:
select * from t1 where test_id = x -- will look for 100,000 rows
然后运行这个:
delete from t1 where test_id = x
我认为这会有所帮助,因为选择查询不会将数据放入 InnoDB 缓冲池吗?我还没有测试过它,因为我不确定如何正确地测试它。
在这两种情况下,数据都需要定位并从磁盘加载。您是否通过
SELECT
首先运行来做到这一点是无关紧要的。当对表运行两倍的查询量时,您只是将表需要锁定的次数加倍,在这种情况下,因此工作量增加了一倍。
SELECT
此外,出于多种原因,在这里运行两个查询几乎总是比较慢,第一个是 a 。存在的原因之一是SELECT *
您告诉它从磁盘加载所有列。表越宽,这些列的数据类型(以及存储在其中的数据)的大小越大,运行查询所需的时间就越长SELECT
。仅对于DELETE
查询,它没有相同数量的工作。简单回答:否
如果它看起来更快,那是因为查询缓存。正如之前有人所说,您基本上是在运行同一个查询两次,第二次是从缓存中提取结果。
要优化delete,您需要test_id列的索引。