关于UPDATE和SELECT的内部机制?
一个100W的单字段数据表。我的两个SQL语句:
SELECT * FROM mytb WHERE mycol like '%aaaaaa%';
UPDATE mytb set mycol='AAAAAA' WHERE mycol like '%aaaaaa%'
在表中根本不存在符合WHERE 要求的记录
结果是:
SELECT 很快。0.38 秒
UPDATE很慢。8 秒
我原先以为的是UPDATE也会和SELECT一样,一行一行用WHERE条件比较。有符合条件的记录再UPDATE。这样的话如果一直没有符合条件的。那么就应该和SELECT一样。为什么上面会差别这么大呢。
问得比较菜。。各位指教。
yejr
周四, 2009/01/15 - 09:03
Permalink
select可以利用到query
select可以利用到query cache,key buffer等,而update则不可以,你要真想对比测试,需要确保每次查询都是最新的,例如每次测试都重启mysqld或者关闭query cache,key buffer等
MySQL方案、培训、支持
chanceycn
周四, 2009/01/15 - 09:19
Permalink
不用重启
不用重启 加上sql_no_cache就可以测试啦,比如:
select sql_no_cache * from a;
chanceycn
周四, 2009/01/15 - 09:20
Permalink
不用重启
不用重启 加上sql_no_cache就可以测试啦,比如:
select sql_no_cache * from a;
zhaolinjnu (未验证)
周四, 2009/01/15 - 10:36
Permalink
使用的是什么存储引
使用的是什么存储引擎做的测试?可以尝试一下,换一下其它引擎,看看结果如何?
游客 (未验证)
周四, 2009/01/15 - 11:27
Permalink
update是先select,再delet
update是先select,再delete,再insert
yejr
周四, 2009/01/15 - 11:32
Permalink
这是replace,不是update
这是replace,不是update,呵呵
MySQL方案、培训、支持