我很想知道,为什么使用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
答案 0 :(得分:3)
对于大型数据集表IN
子句,性能非常慢,在这种情况下,您可以将INNER JOIN
与删除查询一起使用
DELETE video_snapshot FROM video_snapshot
INNER JOIN videos ON video_snapshot.VIDEO_ID=videos.VIDEO_ID;
根据我的经验,IN是一个非常慢的运算符,因为SQL正常 将其计算为由“OR”分隔的一系列WHERE子句(WHERE x = Y. OR x = Z OR ...)..但是,当需要将字段与其他表字段进行比较时,主要显式连接更快。