记录一次SQL优化

发表于:2017-1-17 11:29  作者:PHPor   来源:51Testing软件测试网采编

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: 软件开发 数据库 SQL

  一大早到公司,加班一宿的同事就跟我抱怨,说,一个表只有8w条数据,需要更新一列,根据目前进度估算,大概需要3个小时,即使不需要更新,查询每条数据也需要400ms左右;
  或许确实配置太低,或许确实表的字段太多,我并没有过于吃惊,但是3小时确实太多,便一起查了一下:
  1、iops并不高,说明内存够用
  2、cpu很高,很可能没有合适的索引,说是用了索引了,还是确认一下吧
  3、果然搞错了,没有用到索引
  4、8w条数据,添加索引也应该很快,于是添加了一个索引,耗时不到10s
  5、执行sql语句,还是很慢,explain显示可能能用到我们刚才添加的索引,但是rows上来看还是全表扫描,为什么?
  6、sql语句大致为: update table1 set bb=1 where aa=123
  7、现在已经基本可以怀疑aa的类型应该不是int的了,查看表结构,果然aa的类型为varchar
  8、修改sql语句:update table1 set bb=1 where aa=’123′
  9、重新开始更新8w条数据,共耗时不到10s
  分析:
  因为aa是varchar类型,如果要和一个数字比较,势必要对aa进行转换,如此就用不到索引了;这种错误太容易出现了

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2020, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道