为什么MySQL的DELETE语句不能在子查询中使用索引?

16 浏览
0 Comments

为什么MySQL的DELETE语句不能在子查询中使用索引?

在此发现的一些其他问题中已经确定,使用MySQL中的“子查询”会导致删除操作变慢,而相同的“选择”查询会执行得很快:

了解到JOIN可以使用索引,我想问专家们:

是什么阻止MySQL/MariaDB在带有子查询的DELETE操作中使用索引?这是一个实现问题还是一个概念性问题?有没有计划解决这个问题?其他SQL供应商是否也受到同样的问题影响?

0
0 Comments

MySQL的DELETE语句在子查询中无法使用索引的原因是因为使用了"IN ( SELECT ... )"这种子查询的方式。相反,应该使用多表的DELETE语句来代替。这样做可以使用适用的索引。如果要删除的数据是从多个表中获取的,可以参考这里的文档说明。

解决方法是使用多表的DELETE语句,而不是使用子查询的方式。这样可以避免无法使用索引的问题。具体的使用方法可以参考MySQL的文档中的多表删除部分。

总之,要解决MySQL DELETE无法使用索引的问题,应该避免使用子查询的方式,而是使用多表的DELETE语句来代替。这样可以充分利用索引。

0