记录一次SQL优化
作者:PHPor 发布时间:[ 2017/1/17 11:35:00 ] 推荐标签: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进行转换,如此用不到索引了;这种错误太容易出现了
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
在测试数据库性能时,需要注意哪些方面的内容?测试管理工具TC数据库报错的原因有哪些?怎么解决?数据库的三大范式以及五大约束编程常用的几种时间戳转换(java .net 数据库)优化mysql数据库的几个步骤数据库并行读取和写入之Python实现深入理解数据库(DB2)缓冲池(BufferPool)国内三大云数据库测试对比预警即预防:6大常见数据库安全漏洞数据库规划、设计与管理数据库-事务的概念SQL Server修改数据库物理文件存在位置使用PHP与SQL搭建可搜索的加密数据库用Python写一个NoSQL数据库详述 SQL 中的数据库操作详述 SQL 中的数据库操作Java面试准备:数据库MySQL性能优化

sales@spasvo.com