繁体   English   中英

IN子句中子查询在删除查询中具有大表的性能

[英]Performance of sub-query in IN clause with large tables in delete query

我想知道,为什么用IN-Operator进行查询要比简单的SELECT慢得多。

让我通过一个例子展示我的观察结果:

Query1: SELECT VIDEO_ID FROM videos (about 8000 rows with 1 column)

Query2: DELETE FROM video_snapshot WHERE video_snapshot.VIDEO_ID IN (Query1)

video_snapshot是一个很大的表,具有超过7.000.000行,但是对VIDEO_ID进行了索引,因此在WHERE使用VIDEO_ID进行查询足够快。

IN员如何工作? 我猜想这只是服务器WHERE子句的简写形式。

我在XAMPP上使用MariaDB 10.1.16

对于大型数据集表, IN子句的性能非常低,在这种情况下,可以将INNER JOIN与删除查询一起使用

DELETE video_snapshot FROM video_snapshot
INNER JOIN videos ON video_snapshot.VIDEO_ID=videos.VIDEO_ID;

以我的经验,IN是一个非常慢的运算符,因为SQL通常将其评估为一系列由“ OR”(WHERE x = Y OR x = Z OR ...)分隔的WHERE子句。将字段与其他表字段进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM