问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SQL 索引对UPDATE的影响

发布网友 发布时间:2022-04-24 08:38

我来回答

4个回答

懂视网 时间:2022-05-08 07:08

本文分析了MySQL中字符串索引对update的影响。分享给大家供大家参考,具体如下:

对某一个类型为varchar的字段添加前缀索引后,基于该子段的条件查询时间基本大幅下降;但对于update操作,所耗的时间却急剧上升,主要原因是在更新数据的同时,mysql会执行索引的更新。

下面做了一个简单的试验。

(1)首先对某个亿级记录的表字段所有记录执行更新:

for idx in range(1, count+1):
 sql = "update tbl_name set platforms=+datetime.now().strftime('%Y%m%d%H%M%S%f')+ where id="+str(idx)+";"
 cursor.execute(sql)

统计用时4个小时左右。

(2)然后对某个亿级记录的表子段添加索引:

sql = "alter table tbl_name add index platforms_index(platforms(8));"
cursor.execute(sql)

然后再执行同上的update语句,统计用时将近9个小时。

(3)由此可见字符串索引对于update等操作在性能上有极大的影响。

虽然以上小试验并没有多大实际意义,但是可以延伸一下,如果不对该字段添加索引,而是直接把该字段数据存储到另一个小表b,然后在该表添加一个id字段映射到小表b,然后再执行update操作;这样性能又如何呢?

理论上性能应该与记录的重复度有关,如果重复率高,小表b将会很小(unique去重);而更新所用时间为通过原表映射查询表b字段的时间+更新表b记录的时间,总体上应该比更新记录的时间+更新索引的时间要少。

不过只是估算,结果如何感兴趣的朋友可以动手验证一下。

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》

希望本文所述对大家MySQL数据库计有所帮助。

您可能感兴趣的文章:

  • mysql生成随机字符串函数分享
  • MySQL中随机生成固定长度字符串的方法
  • python实现mysql的单引号字符串过滤方法
  • Mysql字符串字段判断是否包含某个字符串的2种方法
  • Mysql中实现提取字符串中的数字的自定义函数分享
  • mysql截取的字符串函数substring_index的用法
  • sqlserver、mysql获取连接字符串步骤
  • Mysql字符串处理函数详细介绍、总结
  • mysql获取字符串长度函数(CHAR_LENGTH)
  • Mysql 自定义随机字符串的实现方法
  • 热心网友 时间:2022-05-08 04:16

    看A表中的数据量了,数据量大的话,C列建索引肯定是加快速度的,因为建了索引后可以通过索引快速找到C=2的数据,然后进行更新。
    如果数据量不大的话,那就没多大影响的,也不会减少多少速度的

    如果你要一次性更新大量数据的话,索引就可能会拖慢速度了,因为要先写数据,然后再维护索引,多一步操作总归是要花时间的

    热心网友 时间:2022-05-08 05:34

    假如你的表
    A ( ID 主键, B, C );

    UPDATE A SET B=1 WHERE C=2;

    如果 A 表数据有 1000 W行, C 的分布为 1,2,3 .... 1000W

    如果 C 上面没有索引, 那么上面的操作, 走 “全表扫描”
    那么要访问全部的 1000 W行 数据之后, 才知道, 本 SQL 语句, 需要 更新 1行数据。
    然后完成 update 操作。
    基本的操作成本是, 顺序访问表, 1000W 行。

    如果 C 上面有索引, 那么上面的操作, 走 索引。
    首先, 通过索引, 定位到, 满足 c= 2 的数据, 有1行, 物理地址是 ( 0x,,,,)
    然后 通过 物理地址, 去 访问表的数据, 更新相应的数据行的处理。
    这种情况下, C上面有索引, 处理速度比没索引要快。
    基本的操作成本是
    访问索引, 获取索引信息 1行。
    根据物理地址访问表, 1 行。

    如果 A 表数据有 1000 W行, C 的分布为 1,2 ( 其中 c=1 的有 500W, c=2 的有 500W)
    这种情况下。 如果 C 上面有索引, 并且数据库还使用索引的话, 那么可能速度就没索引还慢了。
    因为, 通过索引, 定位到, 满足 c= 2 的数据, 有500W行, 物理地址是 ( 500W 个物理地址), 然后去完成 update 操作。
    基本的操作成本是
    访问索引, 获取索引信息 5000行。
    根据物理地址访问表, 5000 行。

    热心网友 时间:2022-05-08 07:08

    有了索引在插入更新都会慢
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 求助桂林春节三日游攻略 桂林三日游最佳路线 数据库建立索引怎么利用索引查询? 自驾游 桂林阳朔三日游 怎么安排游玩景点 为什么使用mysql索引之后速度下降了80 数据库中查询优化的目的是什么? 求广西三日游路线攻略,桂林北站出发。主要路线桂林-漓江-阳朔这几个地... 关于索引的面试题 求桂林三日游攻略!~~ 在Oracle数据库中,使用索引一定会加快select速度,但update速度可能会降低;这句话对还是错 我想陪女朋友去桂林游玩,自由行三天两夜哪个旅游爱好者能给个旅游攻略最值得去的地方景点,三天具体行程 oracle中加索引会不会加快更新的速度?有人说会减慢更新速度?谁知道为什么吗? 非主键索引为什么能提高搜索效率但会降低更新效率? 在数据库中建立索引是会加快数据更新速度还是会减慢? 下列关于索引的叙述中,错误的是( ) 中国的蔬菜类分别有什么 世界上都有什么蔬菜? 1000种蔬菜名字? 哪个牌子的笔记本电脑质量好,性能稳定? 什么品牌的电脑质量最好 广州到广西的三日游 谈谈在完成大量复杂查询的时候如何建立索引提高查询速度? 求大佬帮帮... 数据库设计过程中,对于大批量的数据如何进行数据库优化? 广西五一三日游去哪里?桂林和北海都去过了 索引可以提高update语句的执行效率么? 请大家帮忙看下这几道VF题目5 桂林三日游路线 广西针对退休教师如何打造历史文化主题三日游路线 索引是怎样提高查询的速度的,原理是什么 两人桂林三日游费用? 淘小铺198和399的区别在哪? 淘小铺和淘宝其他优惠频道有什么区别吗? 蜜源跟淘小铺有什么区别吗? 淘小铺和淘宝的区别是什么? 听说用嗖嗖小铺买东西能省钱? 请问怎么区分淘小铺和道珉优品小电商平台,这两个有哪些区别? 现在做淘小铺的人多吗?合法吗? 淘小铺可靠吗?淘小铺app到底是一个什么东西? 阿里巴巴零售通和淘小铺有什么区别? 淘小铺靠谱吗到底?