欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL查询效率问题解答

程序员文章站 2022-03-31 10:13:26
最近在使用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"]))