警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱

本文探讨了在MySQL中使用UPDATE语句时,WHERE从句中的IN()子查询可能遭遇的性能陷阱。尽管同样的写法在SELECT语句中可能表现良好,但优化器在UPDATE语句中的子查询优化不尽如人意,导致执行缓慢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mer_stage 表有 216423 条记录,DDL:
CREATE TABLE `mer_stage` (
  `STAGE_ID` int(11) NOT NULL AUTO_INCREMENT,
  `MER_ID` int(11) NOT NULL,
  `MER_CODE` varchar(16) DEFAULT NULL,
  `MER_NAME` varchar(80) NOT NULL,
  `INS_CODE` varchar(16) NOT NULL,
  `INS_NAME` varchar(64) DEFAULT NULL,
  `AGENT_CODE` varchar(16) DEFAULT NULL,
  `AGENT_NAME` varchar(64) DEFAULT NULL,
  `BIG_CATEGORY_NAME` varchar(32) DEFAULT NULL,
  `SUB_CATEGORY_CODE` char(4) DEFAULT NULL,
  `SUB_CATEGORY_NAME` varchar(64) DEFAULT NULL,
  `LICENSE_CODE` varchar(64) DEFAULT NULL,
  `LICENSE_NAME` varchar(64) DEFAULT NULL,
  `SHORT_NAME` varchar(25) DEFAULT NULL,
  `MER_STATUS` tinyint(4) DEFAULT NULL,
  `PROVINCE_NAME` varchar(16) DEFAULT NULL,
  `CITY_CODE` char(4) DEFAULT NULL,
  `CITY_NAME` varchar(12) DEFAULT NULL,
  `REGISTER_ADDRESS` varchar(128) DEFAULT NULL,
  `BIZ_ADDRESS` varchar(128) DEFAULT NULL,
  `TAX_REGISTRATION` varchar(32) DEFAULT NULL,
  `INSTITUTION` varchar(16) DEFAULT NULL,
  `LEGAL_NAME` varchar(40) DEFAULT NULL,
  `LEGAL_CARD` varchar(32) DEFAULT NULL,
  `LEGAL_PHONE` varchar(16) DEFAULT NULL,
  `BIZ_SCOPE` varchar(128) DEFAULT NULL,
  `BIZ_CONTENT` varchar(64) DEFAULT NULL,
  `BIZ_TIME` varchar(32) DEFAULT NULL,
  `LICENSE_EXPIRED` varchar(16) DEFAULT NULL,
  `AVG_SINGLE_TRADE` int(11) DEFAULT NULL,
  `AVG_MONTH_TRADE` int(11) DEFAULT NULL,
  `BIZ_PLACE_OWNER` varchar(64) DEFAULT NULL,
  `REGISTERED_CAPITAL` decimal(11,0) DEFAULT NULL,
  `PAID_IN_CAPITAL` int(11) DEFAULT NULL,
  `BIZ_PERIOD` tinyint(4) DEFAULT NULL,
  `BIZ_AREA` int(11) DEFAULT NULL,
  `SETTLE_PERIOD` tinyint(4) DEFAULT NULL,
  `DELAY_TIME` varchar(50) DEFAULT NULL,
  `DELAY_TYPE` tinyint(4) DEFAULT '0',
  `BANK_CODE` varchar(40) DEFAULT NULL,
  `BRANCH_CODE` varchar(25) DEFAULT NULL,
  `BRANCH_CODE_ONE` varchar(25) DEFAULT NULL,
 
### 如何自定义 'open in browser' 的快捷键配置 在编辑器中自定义快捷键是一项常见的需求,以下是关于如何在不同环境中实现这一功能的具体说明。 #### Sublime Text 中的快捷键自定义 在 Sublime Text 中,可以通过 `Preferences -> Key Bindings` 来访问默认和用户自定义的快捷键设置。如果希望修改或新增 `open in browser` 功能的快捷键,需按照以下方式操作: 1. **打开用户快捷键配置文件** 菜单路径为:`Preferences -> Key Bindings - User`[^5]。 2. **添加新的快捷键映射** 将如下代码复制并粘贴至用户快捷键配置文件中: ```json [ { "keys": ["ctrl+shift+b"], "command": "open_browser" } ] ``` 上述代码表示通过按下 `Ctrl+Shift+B` 组合键来触发 `open_browser` 命令。 --- #### VS Code 中的快捷键自定义 对于 Visual Studio Code (VSCode),同样支持对已安装插件的功能进行快捷键绑定调整。具体步骤如下: 1. **确认插件状态** 首先确保已经安装了用于浏览网页的相关插件(如 `Open in Browser` 插件)。如果没有,请前往扩展市场搜索并安装该插件[^2]。 2. **进入快捷键管理界面** 使用菜单导航到 `File -> Preferences -> Keyboard Shortcuts` 或者直接按快捷键组合 `Ctrl+K Ctrl+S` 打开全局键盘快捷键列表页面。 3. **创建自定义快捷键规则** 如果发现现有快捷键无法满足需求,则可通过 JSON 文件手动指定新规则。点击右上角的小图标切换到 JSON 编辑模式,在其中加入类似以下内容: ```json [ { "key": "alt+b", "command": "extension.openInDefaultBrowser", "when": "editorTextFocus" }, { "key": "shift+alt+b", "command": "extension.openInSpecifiedBrowser", "args": {"browserName": "Chrome"}, "when": "editorTextFocus" } ] ``` 此处分别设置了两个不同的按键行为——前者调用默认浏览器;后者则强制使用 Chrome 浏览器作为目标环境。 4. **验证效果** 完成上述改动保存后即可生效测试是否成功关联对应动作。 --- #### Eclipse 平台下的解决方案 虽然题目未提及 Eclipse IDE ,但考虑到其广泛的应用场景也简单介绍下相关做法供参考对比学习之用: 假如想给某个特定功能比如“Open Explorer”分配专属热键的话,可以遵循这样的流程完成设定工作流: - 依次展开选项卡顺序:`Window->Preferences...` - 寻找定位子节点位置:`General->Keys` - 查找到对应的Action Name字段值等于"Open Explorer"[^4] - 双击空白区域录入期望使用的快捷序列号串例如:"Alt+E" 最后记得点OK按钮提交更改结果! --- ### 注意事项 无论在哪种开发环境下实施此类定制化处理之前都应该仔细阅读官方文档或者社区指南以免造成不必要的冲突干扰正常业务逻辑运行效率下降等问题发生。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值