MySQL查询效率问题解答
程序员文章站
2022-07-05 23:22:13
最近在使用python在MySQL中读写数据时遇到了,两个程序插入查询语句格式相同,却效率相差约百倍的问题。
原因是MySQL字段类型为字符串,使用字符串数据条件查询比使用数值型...
最近在使用python在MySQL中读写数据时遇到了,两个程序插入查询语句格式相同,却效率相差约百倍的问题。
原因是MySQL字段类型为字符串,使用字符串数据条件查询比使用数值型数据效率高的很多,个人估算有百倍,
而我两个程序就使用了两种数据类型,花了两天才找出效率慢的问题。后来去搜了一下相关问题,看到有人做出了
图文对比,效率对比很直观。
教训就是,虽然数据库可以对程序中的数据格式进行隐式转换,但会带来巨大的效率差异,所以以后对数据库
进行查询操作时,字段是什么类型,所用的查询数据格式也应该是这种类型。
下面是我的程序:
程序1:
predictions是个生成器,里面数据是数值型
格式为:((432424,2343423,2.4343),(565645,656343,0.43354))
sql_update="update features_pos set ra=%s where src=%s and dist=%s "
for u,v,p in predictions: counter=counter+1 db.update_record(sql_update,(p,u,v)) logging.warning("%s--############----%s-VS-%s############"% (counter ,u,v)
程序2:
db.get_fetchall 函数返回的是元祖类型,数据是unicode字符串型格式为:({"src":"453523332","dist":"435353243"},{"src":"647564434","dist":"54543535"}))
sql_update="update features_pos set cn=%s where src=%s and dist=%s "
counter = 0 for item in db.get_fetchall(query_src_dist): counter = counter + 1
db.update_record(sql_update,(CN,item["src"],item["dist"])) logging.warning("[%s]############----%s-VS-%s############"% (counter,item["src"],item["dist"]))