我想知道,为什么使用IN-运算符的查询比简单的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-clause中使用VIDEO_ID查询就足够快了。
IN-Operator是如何工作的?我猜这只是服务器式WHERE子句的一个简短形式。
我在XAMPP上使用MariaDB 10.1.16
发布于 2016-09-22 09:27:37
对于大型数据集表,IN子句的性能非常慢,在这种情况下,可以使用INNER JOIN和delete查询。
DELETE video_snapshot FROM video_snapshot
INNER JOIN videos ON video_snapshot.VIDEO_ID=videos.VIDEO_ID;根据我的经验,In是一个非常慢的操作符,因为SQL通常将它计算为一系列WHERE子句,用" OR“分隔(其中x=Y或x=Z或.)。但是,当需要将字段与其他表字段进行比较时,显式联接的速度更快。
https://stackoverflow.com/questions/39634970
复制相似问题