[英]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.