商城活动时,遇到会员服务一个接口 响应很慢,导致整个服务的响应时间延长,
具体原因:
sql 语句查询条件使用了一个where 条件 entity_type_id=1, entity_type_id又是索引,且表中有470多W行数据, 就导致数据查询很慢,8-9个此查询并发时 就阻塞了数据库,同时有其它数据库操作,整个数据cpu使用率达到95%。
优化: 查询去掉了entity_type_id=1 条件, 查存速度从1.4s 变到了0.02s (表中数据entity_type_id都为1)
引发思考:
数据库索引是如何工作的
参考文章:
https://www.cnblogs.com/klb561/p/10666296.html
- 在计算机系统中一般包含两种类型的存储,计算机主存(RAM)和外部存储器(如硬盘、CD、SSD等), 主存和外部存储的性能相差几百倍
- 一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上
3.这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复杂度。换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数 - 磁盘读取 分为 机械运动的寻道时间,旋转延