首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两个相关表中大容量删除性能

从两个相关表中大容量删除性能
EN

Stack Overflow用户
提问于 2013-09-13 21:38:58
回答 1查看 48关注 0票数 0

我有两个表,结构如下:(系统中的每个对象类型都有多个ai_$object表)

代码语言:javascript
复制
       ai_$object         ,       ai_ext_ids
--------------------        -------------------------- 
ext_id | hash                    id | ext_id | object_name | sfID

通过批量删除,我得到了sf_ids,并且需要从这两个表中删除记录,最愚蠢的删除方法如下:

在伪代码中-->

代码语言:javascript
复制
$idToBeDeleted = SELECT ext_id FROM ai_tr_tbl_extids WHERE objectName='$object' AND sfID ='$s'" ;

DELETE FROM ai_tr_tbl_extids WHERE objectName='$object' AND sfID ='$s';

DELETE FROM ai_$object WHERE ext_id='$idToBeDeleted';

我的问题是如何提高这部分的性能?这段代码使用in循环运行,我是否应该使用数组进行批量删除: SELECT * FROM table WHERE ID IN (1,2,3,4)

EN

回答 1

Stack Overflow用户

发布于 2013-09-13 23:49:17

为了获得更好的性能,应该对objectName列进行索引。并尝试以下查询。

代码语言:javascript
复制
$idToBeDeleted = SELECT ext_id FROM ai_tr_tbl_extids WHERE objectName='$object' AND sfID ='$s'" ;

DELETE FROM ai_tr_tbl_extids WHERE ext_id='$idToBeDeleted';

DELETE FROM ai_$object WHERE ext_id='$idToBeDeleted';

但是,如果您能够获得要删除的ext_id的列表,则可以删除循环,只使用IN删除。

代码语言:javascript
复制
DELETE FROM ai_tr_tbl_extids WHERE ext_id IN ($idToBeDeletedCommaSeparatedValue');

DELETE FROM ai_$object WHERE ext_id IN ($idToBeDeletedCommaSeparatedValue');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18787797

复制
相关文章

相似问题

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