设置所有行的一列的值非常慢

2024-01-11

我有一个包含大约 350 000 行的表,最近我从 MyISAM 存储引擎更改为 InnoDB。

我运行查询

UPDATE `users` SET `online` = 0

每次我的服务器启动时,使用 MyISAM 时都没有任何问题。该查询通常只影响几百行。查询的执行时间很慢,平均大约 1.5 秒,但我可以忍受。

现在我已经更改为 InnoDB,但是查询可能需要数十秒才能完成。

这是 mysql-slow.log 的一部分

# Query_time: 29.431546  Lock_time: 0.000091 Rows_sent: 0  Rows_examined: 348617
SET timestamp=1372505574;
UPDATE users SET online = 0;

这个特定的查询更改了 200 行的在线值,其他行已经是 0。

我能够通过将查询更改为来解决该问题

UPDATE `users` SET `online` = 0 WHERE `online` != 0

本次查询耗时约0.1秒

现在,这是我的问题。为什么从 MyISAM 更改为 InnoDB 时时间会显着增加?

为什么没有 WHERE 部分查询会这么慢?据我所知,MySQL 的查询优化器非常强大,但这表明事实恰恰相反。是什么导致查询执行时间非常慢?

MySQL服务器版本是5.5.31-0。


在InnoDB中,update语句锁定它们扫描的每一行。这意味着要更新 200 行,它必须创建 350 000 个行级锁,同时保持回滚锁并向任何正在读取已更改值的事务提供先前的值(因为该事务不是已提交且更改不是最终的)

另一方面,MyISAM 锁定整个表。

因此,如果您需要更新所有行,则锁定整个表,您将获得更好的性能(您不需要行级锁)

但更好的是,提供一个 WHERE 子句,就像你所做的那样,InnoDB 将仅获取匹配行的锁(以及索引树中的一些间隙锁,但这超出了问题的范围)

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

设置所有行的一列的值非常慢 的相关文章

  • 如何在 SEQUELIZE (nodeJS) 中创建触发器?

    我正在尝试使用sequelize 创建一个触发器 主要思想是创建一个实例CONFIG创建后USER USER MODEL module exports function sequelize DataTypes var User sequel
  • 提高第一个查询的性能

    如果执行以下数据库 postgres 查询 则第二次调用要快得多 我猜第一个查询很慢 因为操作系统 linux 需要从磁盘获取数据 第二个查询受益于文件系统级别和 postgres 中的缓存 有没有一种方法可以优化数据库以快速获得结果fir
  • MYSQL - 使用逗号分隔字符串作为变量输入的存储过程

    我希望有人能够提供帮助 我已经创建了我的第一个存储过程 没什么花哨的 但是我遇到了问题 我想给它一个字符串输入 例如 1 2 3 4 5 然后它执行一个简单的操作SELECT FROM TABLE WHERE EAN IN VAR 所以存储
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • MySQL 与日语字符

    我试图弄清楚如何创建一个表 以便我可以在其中插入日语名字 现在我有 Type InnoDB Encoding UTF 8 Unicode utf8 Collation utf8 general ci 但是 当我插入字符时 它显示为 当我使用
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • 多处理器机器中秒表的最佳实践?

    我找到了一个好的question https stackoverflow com questions 28637 is datetime now the best way to measure a functions performance
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • mysql排序和排名语句

    我需要一些 mysql 语句的帮助 我的表 1 有 7 列 表 2 有 8 列 额外的列名为排名 我的语句应该是这样的 从表 1 中选择全部 然后按 用户数 排序 将其插入表 2 中并排名开始 1 2 3 等 table 1 usernam
  • 是否可以使用“git gc”来打包引用日志对象?

    正如答案所暗示的https stackoverflow com a 32025729 https stackoverflow com a 32025729我已经配置了远程裸仓库 git config gc pruneExpire never
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht
  • Canvas GetImageData() / PutImageData() 在移动设备上的性能很糟糕

    我正在做一个小型 HTML5 游戏 在地图开头加载精灵时 我使用 GetImageData 循环遍历所有图像 PutImageData 进行一些处理 这在我的电脑上运行得非常好 但是在我的手机上却慢得可怕 PC 5 6 ms iPhone
  • 如何在 MySQL 查询本身中检索 JSON 数组中存储的值?

    我有下表 product id product name image path misc 1 flex http firstpl course level id 19 group id 40067 2 Android http firstp
  • MySql如何将varchar(纬度,经度)转换为十进制字段?

    在 mysql 中 我有一个 varchar 其中包含 Google 地图提供的纬度和经度 我需要能够基于边界框值进行查询 但不需要现在可用的地理特征 我正在尝试使用 varchar 中找到的 Decimal 值填充 2 个新的 Decim
  • 如何获取日期时间字段的 UTC?

    我正在使用 MySQL 5 并且正在尝试将日期时间字段转换为 UTC TIMESTAMP 这是我所拥有的 但它不起作用 并且不确定我是否可以做到这一点 但有人可以告诉我我做错了什么吗 谢谢 我已经尝试过这个 SELECT UTC TIMES
  • 通过sequelize.query() 插入原始查询时不会触发挂钩

    我有以下内容EmployeeMySQL 数据库模型 var bcrypt require bcrypt module exports sequelize DataTypes gt const Employee sequelize defin
  • GWT 在开发模式下运行缓慢

    我在开发模式下使用最新的 GWT 2 0 版本的 Eclipse Galileo 但它运行速度非常慢 我需要等待大约一分钟才能打开一个页面 但编译后 当我使用 Tomcat 5 5 运行它时 我的应用程序运行得很好 我的代码不太重 我猜有一
  • 如何使用 Connector/C++ 更新 MySQL 中的一行值

    我有一个简单的数据库 想要更新一个 int 值 我最初执行一个查询并返回一个 ResultSet sql ResultSet 对于结果集中的每个条目 我想修改表的一个特定列中的值 然后将其写回到数据库 更新该行中的该条目 根据文档 我不清楚
  • 在查询中创建临时变量

    我希望能够在查询中创建一个临时变量 而不是存储过程或函数 它不需要声明和设置 这样我在调用它时就不需要传递查询参数 正在努力朝这个方向努力 Select field1 tempvariable 2 2 newlycreatedfield t

随机推荐

  • 用于值类型 int 的 ASP.NET MVC 2 编辑器模板

    我想为值类型 即 int 创建一个 MVC 2 编辑器模板 有人用预览 1 位完成此操作吗 非常感谢 当您在回发时提交值时 尼克 克拉克的答案会起作用吗 在 MVC2 预览版 2 中 调用 Html Textbox abc Model To
  • Rails 控制器中的 Process.fork

    我们正在对一个新应用程序进行一些原型设计 并注意到其中一个操作需要很长时间才能加载 80 120 秒 由于很多处理不需要在页面加载时进行 我们可以稍后通过 Ajax 请求数据 我想到使用Process fork允许页面立即返回 而处理仍在
  • 如何更改 iPhone 中文本字段的背景颜色?

    我想将文本字段的背景颜色更改为透明的颜色 我努力了 option5btn backgroundColor UIColor grayColor 但我想要一些其他颜色 谁能告诉我 iPhone 文本字段的背景中可以使用哪些所有颜色 谁能帮我这个
  • 数组上的 MongoDB 地理空间索引(多键 + 地理空间)

    这是我的数据的简化版本 gt db foo insert name jim locations 10 10 3 6 1 2 gt db foo insert name john locations 1 5 2 4 我希望能够做类似的事情 g
  • 不需要公司名称 WooCommerce(第 3 方插件)

    我想让 WooCommerce 中不需要计费公司和运输公司 由于某种原因 我使用的代码适用于除公司部分之外的所有内容 事实证明 第三方插件需要公司名称 以下是该插件的完整代码
  • MongoDB 中的 UpdateMany 使用 $inc 运行两次

    感谢我在上一个问题中得到的帮助 使用文档中的值更新许多 mongodb 文档 https stackoverflow com questions 63530102 updatemany mongodb documents with valu
  • 聚合和聚合根的混淆

    我被分配了一个非常简单的项目作为考试 我有想法使用领域驱动设计来开发它 你们中的许多人可能会说该应用程序非常简单 使用存储库和 UoW 只是浪费时间 您可能是对的 但我认为这是一个学习更多东西的机会 该应用程序是一个 机票 系统 从下图中您
  • 视差部分初始背景位置与页面滚动时不一致

    我花了一整天的时间尝试创建一个视差部分 无论它放在页面上的哪个位置 它都能正常工作 但我对代码所做的每一次更改都会解决一个问题并产生另一个问题 到目前为止 这是我的代码 function use strict parallax sectio
  • 如何在 antd select 上添加分页?因为从接口获取数据是巨大的。所以我想实现分页

    如何在 Antd 的 Select 上添加分页 因为从接口获取数据是巨大的 所以我想实现分页 但文档api不支持 import Select from antd const Option Select Option let province
  • 使用地理定位和 Google 地图 API [帮助]

    我是移动开发领域的新手 现在我正在构建一个使用 jQuery mobile 和 PhoneGap 的应用程序 这是我的逻辑 我有一个包含用户及其地址的表 我获取用户地址并通过地图 API 传递它以捕获位置 但我对每条记录都这样做 有时 AP
  • Firestore Web 代码示例给出了无效的参数类型

    我正在尝试 Firebase 的新 Firestore 当我运行代码示例时https firebase google com docs firestore manage data add data authuser 0 https fire
  • css在表单中浮动2个输入字段

    我在理解 css 时遇到以下问题 我有一张登记表 在这种形式中 我使用字段集 现在我想在每行旁边放置两个输入字段 上面的每个字段还应该有一个标签 所以我想要实现的是 label 1 label 2 label 3 label 4
  • Intellij 自动构建 - 不存在

    如果我删除一个方法 则在我手动构建项目之前 不会显示错误 由于不存在方法而在代码中的其他位置 有没有办法让它在保存 更改时自动构建 我在某个地方缺少一个选项吗 你可以尝试理念 12 EAP http confluence jetbrains
  • TFLite 的硬刷操作

    我有一个用 Tensorflow Keras 编写的自定义神经网络 并应用 Hard swish 函数作为激活 如 MobileNetV3 论文中使用的那样 执行 def swish x return x tf nn relu6 x 3 6
  • 嵌套 jquery 选择器触发父级和子级特定事件

    我有一个具有以下结构的表 表 主 tbody tr Row td 输入 EditRow 我的 jquery 看起来像这样 table Main gt tbody gt tr Row live click function e RowClic
  • PhantomJS/CasperJS AssertExists() 失败

    我试图检查我的网页中是否存在选择器 但 casperjs 从未找到它 我尝试过两种方法 1 无需等待 casper then function search for casperjs from google form this test a
  • 出站 ChannelHandler 的捕获所有异常处理

    在 Netty 中 您有入站和出站处理程序的概念 只需在管道的末尾 尾部 添加一个通道处理程序并实现一个捕获所有入站异常处理程序即可实现exceptionCaught覆盖 如果未沿途处理 沿入站管道发生的异常将沿着处理程序传播 直到遇到最后
  • Visual Studio 2012 的 Intellisense 不再接受按空格键的建议

    我一直在多台 PC 上使用 Visual Studio 2005 2008 2010 由其他人或我安装 始终对它的智能感知建议是这样工作的 我开始打字 弹出带有建议的窗口 突出显示当前建议 然后我可以按空格键接受建议 然而 由于我在当前的
  • 为 Flink 集群中的插件添加自定义依赖项

    我有一个 Flink 会话集群 作业管理器 任务管理器 版本 1 11 1 配置了 log4j console properties 以包含 Kafka 附加程序 此外 在作业管理器和任务管理器中 我都启用了 flink s3 fs had
  • 设置所有行的一列的值非常慢

    我有一个包含大约 350 000 行的表 最近我从 MyISAM 存储引擎更改为 InnoDB 我运行查询 UPDATE users SET online 0 每次我的服务器启动时 使用 MyISAM 时都没有任何问题 该查询通常只影响几百