首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除查询中具有大表的in子句中子查询的性能

删除查询中具有大表的in子句中子查询的性能
EN

Stack Overflow用户
提问于 2016-09-22 09:16:58
回答 1查看 1.8K关注 0票数 2

我想知道,为什么使用IN-运算符的查询比简单的SELECT慢得多.

让我就一个例子演示一下我的观察:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-22 09:27:37

对于大型数据集表,IN子句的性能非常慢,在这种情况下,可以使用INNER JOIN和delete查询。

代码语言:javascript
复制
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或.)。但是,当需要将字段与其他表字段进行比较时,显式联接的速度更快。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39634970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档