sql语句求助

update table set column1=column2 where xxx

update table set column1="aaaaa" where xxxx

第一条数据比第二条语句慢了几倍,这是什么原因?有什么方法让第一条的语句和第二条语句一样快么,或者有其他相同功能的语句。我是sql菜逼,不要喷我。

----发送自 Meizu MX4,Android 5.0.1


网友评论:
这两句执行的任务和结果根本不同,你怎么比较?
这真的是完全不同的东西,我没办法帮你
第一句大概是要先做一个select,然后再把select的结果update
第二句直接update就行了
其实我想要的功能就是把同一行里面某个列的值赋给另外一列。不知道有什么高效的语句。

----发送自 Meizu MX4,Android 5.0.1
不看执行计划谈优化sql就是耍流氓!
1.两条都不会快的
因为update语句的本质不是说update全表是一条语句,而是
update 第一行,第二行......最后一行

2.一句复杂的sql语句会被翻译成多条简单的sql语句,所以第一条慢就对了
所以第一条就是慢,它其实是先select出来.然后再写进去,所以相比后者要增加n条select.

3.想快有几个办法
3.1,col1和col2加索引
3.2如果col的值是枚举值,枚举项比较少,可以考虑把语句转换为
update table set column1=枚举项1 where col2=枚举项1
...
update table set column1=枚举项n where col2=枚举项n
虽然整个花的时间差不多,可是因为分成多个语句,减少死锁出现的概率

谢谢楼上的回答。我只能读出来再更新了,这样速度都快点

----发送自 Meizu MX4,Android 5.0.1
只是为了快的话建个新表用insert……select放进去数据再把旧表删了新表改成旧表名。当然请问你们boss允许不允许这么玩对应的数据库环境……
当然要是oracle允许临时表的话连改名都省了先把数据放临时表里,旧表支持truncate的话直接truncate掉再把临时表的数据插回去。

搜索关键词 “insert select 替代 update”

再强调一遍,请问你们boss允许不允许这么玩对应的数据库环境……



只是为了快的话建个新表用insert……select放进去数据再把旧表删了新表改成旧表名。当然请问你们boss允许不允许这么玩对应的数据库环境……
当然要是oracle允许临时表的话连改名都省了先把数据放临时表里,旧表支持truncate的话直接truncate掉再把临时表的数据插回去。

搜索关键词 “insert select 替代 update”

再强调一遍,请问你们boss允许不允许这么玩对应的数据库环境……如果用改名法的话需要注意以前表上的外键触发器之类的……