本文分析了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中字符串索引对update的影响分析就介绍到这了。月亮,她等待着太阳下班后,带着一块广阔无垠的深蓝色的幕布,来到了充满喜怒哀乐的人间。随即把深蓝色的幕布抛向天空,撒出许多黄色的亮闪闪的珍珠——星星。然后静静的、 安详地观看人间在她工作期间的生活。她很轻松,没有忧愁,没有困意,独自呆在那么大的天空。就这样,每当我睡不着坐在窗前时,月亮,便成了我的知心朋友。我就和她诉说着我的心里话。更多相关MySQL中字符串索引对update的影响分析内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!