如何优化 MySQL 更新查询?

2023-12-26

我有一个包含 300 000 条记录的表。在此表中有重复的行,我想更新列“flag”

TABLE

------------------------------------
|number | flag | ... more column ...|
------------------------------------
|ABCD   |  0   | ...................|
|ABCD   |  0   | ...................|
|ABCD   |  0   | ...................|
|BCDE   |  0   | ...................|
|BCDE   |  0   | ...................|

我使用此查询来更新“flag”列:

UPDATE table i 
INNER JOIN (SELECT number FROM table
            GROUP BY number HAVING count(number) > 1 ) i2
ON i.number = i2.number
SET i.flag = '1'

对于这 300 000 条记录,此查询运行速度非常非常慢(超过 600 秒)。

我怎样才能优化这个查询?

我的桌子的结构

CREATE TABLE IF NOT EXISTS `inv` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pn` varchar(10) NOT NULL COMMENT 'Part Number',
  `qty` int(5) NOT NULL,
  `qty_old` int(5) NOT NULL,
  `flag_qty` tinyint(1) NOT NULL,
  `name` varchar(60) NOT NULL,
  `vid` int(11) NOT NULL ,
  `flag_d` tinyint(1) NOT NULL ,
  `flag_u` tinyint(1) NOT NULL ,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `pn` (`pn`),
  KEY `name` (`name`),
  KEY `vid` (`vid`),
  KEY `pn_2` (`pn`),
  KEY `flag_qty` (`flag_qty`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

如果“名称”重复,我想更新 flag_qty


如果您还没有索引number你应该添加一个 -

CREATE INDEX table_number ON table (number);

UPDATE尝试这个 -

UPDATE inv t1
INNER JOIN inv t2
    ON t1.name = t2.name
    AND t1.id <> t2.id
SET t1.flag_qty = 1;

您可以通过直接选择此数据到另一个表中来创建仅包含重复项的表,而不是首先执行此标志更新。

INSERT INTO duplicate_invs
SELECT DISTINCT inv1.*
FROM inv AS inv1
INNER JOIN inv AS inv2
    ON inv1.name = inv2.name
    AND inv1.id < inv2.id

如果您可以解释从中删除行的逻辑inv表1 整个过程可能可以一步完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何优化 MySQL 更新查询? 的相关文章

  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • MySQL 和 PHP 参数 1 作为资源

    好吧 当我运行下面提到的代码时 PHP 向我抛出此错误 在日志中 Error mysql num rows 期望参数 1 为资源 第 10 行 place 中给出的字符串 9 11号线 queryFP SELECT FROM db coun
  • NHibernate - 无法执行查询 - 输入字符串的格式不正确

    我已经为此摸不着头脑有一段时间了 我不知道出了什么问题 概述 我的 MySQL 数据库中有两个表 两者都正确映射到数据库 我可以加载数据 并且我能够查询一个表 但不能查询另一个表 我研究过的解决方案 表和 C 代码之间的类型转换问题 映射问
  • 执行时间为零的循环

    是否有可能有一个执行时间为零的循环 我认为即使是空循环也应该有执行时间 因为存在与之相关的开销 是的 根据假设规则编译器只有义务模拟代码的可观察行为 因此 如果您有一个没有任何可观察行为的循环 那么它可以完全优化 因此实际上执行时间为零 E
  • MySQL正则表达式:如何将字符串中的数字与\d匹配?

    我有一个专栏release date它以字符串格式存储日期 不是 DATETIME 格式 因为它们有时可以是任何其他字符串文字 我想根据给定的月份和年份查找任意日期的所有记录 尝试遵循但对我不起作用 gt Post find all con
  • JDBC 错误:在结果集开始之前[重复]

    这个问题在这里已经有答案了 我在 Java Eclipse 中收到错误消息 我在 MySql 中有一个数据库 它有列 String user name int id time int id desk int user password 我想
  • 模块化算术和 NTT(有限域 DFT)优化

    我想使用 NTT 进行快速平方 参见快速大数平方计算 https stackoverflow com q 18465326 2521214 但即使对于非常大的数字 结果也很慢 超过 12000 位 所以我的问题是 有没有办法优化我的 NTT
  • JavaScript - 无需布尔值即可运行一次

    有没有办法只运行一段JavaScript代码ONCE 而不使用布尔标志变量来记住它是否已经运行过 具体来说not就像是 var alreadyRan false function runOnce if alreadyRan return a
  • “修改列”与“更改列”

    我知道 我们不能使用重命名列MODIFY COLUMN语法 但我们可以使用CHANGE COLUMN syntax 我的问题是 主要用途是什么modify syntax 例如 ALATER TABLE tablename CHANGE co
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • MySQL 概念:会话与连接

    我对 MySQL 的概念有点困惑 会话与连接 当谈论连接到 MySQL 时 我们使用连接术语 连接池等 然而在 MySQL 在线文档中 http dev mysql com doc refman 4 1 en server system v
  • 无法连接到 MAMP 上的 phpMyAdmin

    我收到此错误消息 MySQL 说道 无法连接 设置无效 phpMyAdmin 尝试连接 MySQL 服务器 但服务器拒绝连接 您应该检查配置中的主机 用户名和密码 并确保它们与 MySQL 服务器管理员提供的信息相对应 用户和通行证是默认的
  • 使用什么框架来引导我的第一个生产 scala 项目?

    我正在第一次涉足 scala 的生产应用程序 该应用程序当前打包为 war 文件 我的计划是创建 scala 编译工件的 jar 文件 并将其添加到 war 文件的 lib 文件夹中 我的增强功能是通过 Jersey 公开的 mysql 支
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • 在 MySQL 数据库中保持 TEXT 字段唯一的最佳方法

    我想让 TEXT 字段的值在我的 MySQL 表中唯一 经过小型研究 我发现由于性能问题 每个人都不鼓励在 TEXT 字段上使用 UNIQUE INDEX 我现在想用的是 1 创建另一个字段来包含 TEXT 值的哈希值 md5 text v
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for

随机推荐

  • PyMongo 的批量写入操作功能与生成器

    我想使用 PyMongo 的bulk http api mongodb org python current examples bulk html执行写操作的写操作功能 分批进行 以减少网络往返次数并提高吞吐量 我还发现here http
  • SQL 2008 - INFORMATION_SCHEMA 视图中的外键约束

    我正在编写一个 C 单元测试 用于根据目标数据库 始终是 SQL 2008 以及数据映射到的类来验证 ORM 类的字符串属性 检查指定的外键在数据库中是否有效很容易 static private bool ConstraintExsits
  • 指向非静态成员函数的指针“正式”不被视为指针

    我碰到this https stackoverflow com a 71870413 12002570其中指出 成员函数指针不是指针 指向非成员函数 包括静态成员函数 的指针是指针 上面的引用似乎表明指向非静态成员函数的指针不是指针 同样
  • 如何在 Xcode 4.5“命令行工具”项目中设置工作逻辑单元测试目标?

    无法为特定场景设置单元测试 这就是我正在尝试的 在 Xcode 4 5 中 我创建了一个简单的 OSX 命令行工具 应用项目 基金会 请注意 Xcodedoes not提供自动将单元测试添加到 命令行工具 项目的选项 所以请不要建议勾选复选
  • 用于阻止 Swift 的 Safari 内容的多个过滤器

    我正在构建一个简单的内容阻止应用程序 它有效 但我想应用过滤器 要阻止哪个网站 不阻止哪个网站 UISwitches 保存到NSUserDefaults 因为内容阻止扩展使用 json 所以我不清楚如何选择多个 json 文件同时运行 有什
  • GAE TextProperty 中的“=”符号

    通过 POST 添加文本时 我在文本属性中遇到了奇怪的附加符号 例如 队伍带着不可阻挡的愤怒回来了 他们被警察 阿朗佐和尤马追赶 Vinnie Shorty 和 Kiro 92 的技能将受到考验 该文本中不应有任何 符号 我的代码是 cla
  • 具有自定义网络的 Docker swarm

    我正在尝试弄清楚如何在 Docker 中正确使用 Swarm 模式 首先 我尝试在 2 个工作人员和管理人员计算机上运行容器 而不指定自定义网络 因此我使用默认的入口覆盖网络 但是 如果我使用入口网络 由于某种原因我无法解析tasks my
  • 如何在不同模块中隐藏 Java 中 Kotlin 内部类的可见性?

    我正在研究用 Kotlin 开发的 Android 库 我将某些类的访问修饰符保留为internal 内部类仅在 Kotlin 的该库模块中可见 如果我在应用程序中实现该库 那么它根本不可见 但从 Java 代码访问该库时就会出现问题 如果
  • 如何找出 Vim 设置在哪个插件中被更改?

    今天我有一些奇怪的行为 我有 set autoindent 在我的 vimrc 中 但由于某种原因 每当我打开 PHP 文件时 它就会被关闭 我现在通过添加一行来修复它 autocmd FileType php set autoindent
  • 结合字母顺序和自然顺序(又名用户理智排序)

    我认为这很容易找到预制的 但似乎我在网上找到的任何解决方案都只能解决部分问题 我想对列表进行排序文件名 这些文件大多以人名和 或地址命名 由用户提供 有时使用不同的语言 主要是德语 到处混有一点法语和意大利语 很少有其他西方语言 这个想法是
  • Android Eclipse 插件太慢

    我目前使用的是带有 1 83GHz 处理器和 1 GB RAM 的 Windows 7 机器 我曾经能够使用所有应用程序 没有速度问题 我最近在 Eclipse Helios 中安装了 Android 插件 现在 Eclipse 速度严重减
  • 循环内的侦听器不允许更改外部布尔标志

    继我之前的帖子之后here https stackoverflow com questions 15762311 add a keylistener inside a loop is it possible 我写了一个监听器 Overrid
  • 在 HTML5 和 JavaScript 中使用 Google 地图室内地图 API

    我想使用 HTML5 和 JavaScript 创建一个室内地图应用程序 我创建了一个简单的路线图应用程序 但是当我单击放大任何室内兼容的建筑物 购物中心时 没有级别或地板选项 那么 HTML5 和 Javascript 支持室内功能吗 在
  • 使用 itextsharp 的文本的 x 和 y 坐标

    当我使用 itextsharp 提取文本时 我将获得文本的 x 和 y 坐标 如果我根据 x y 位置将文本从 pdf 转换为 html 则通过使用这 2 个坐标来更改文本位置 获取我使用的 x y 坐标 矢量 curBaseline re
  • 我的班级实例中出现奇怪的内存覆盖问题

    这个问题与this https stackoverflow com questions 6649567 how to check if network shared exe file is used by more than one use
  • 具有 null 安全性的 Flutter / Dart 包integration_test

    据我了解 包集成 测试 https pub dev packages integration test包不是空类型安全的 该包可以用于当前的 Flutter 版本 版本 gt 2 0 吗 如果没有 还有其他选择吗 正如自述文件中所述 该包是
  • SAS LOOP - 从具有值的记录创建列

    假设我有随机诊断代码 例如 001 v58 142 如何从记录中的代码构造列 Input id found code 1 1 001 2 0 v58 3 1 v58 4 1 003 5 0 v58 15000 0 v58 Output id
  • Twilio 在打电话时说动词

    基于这个问题 https stackoverflow com questions 6863305 twilio say verb nested into a dial verb 它非常接近我想要的 当双方建立连接时 我们尝试在通话期间触发
  • 从 Apache Velocity 模板访问常量值?

    是否可以从 Velocity 模板访问常量值 即 Java 类中定义的公共静态最终变量 我希望能够写出这样的东西 if a lt Long MAX VALUE 但这显然不是正确的语法 有很多种方法 1 您可以将值直接放入上下文中 2 您可以
  • 如何优化 MySQL 更新查询?

    我有一个包含 300 000 条记录的表 在此表中有重复的行 我想更新列 flag TABLE number flag more column ABCD 0 ABCD 0 ABCD 0 BCDE 0 BCDE 0 我使用此查询