mybatis使用find_in_set导致cpu占用过高
2013-09-04 15:49
791 查看
问题表asks有个字段attids用来保存问题附件的id,多个附件用“,”隔开,比如有两个附件,附件id分别为8和9,则该字段保存内容为“8,9”
问题maper:
Xml代码
<resultMaptype="com.ozing.dayi.domains.Ask"id="basicAskRsMapper">
......省略其他
<associationproperty="attachList"column="attids"select="com.ozing.dayi.persistence.AttachMapper.findAttachListByIds"/
</resultMap>
附件findAttachListByIds的sql如下:
Sql代码
SELECT * FROM attachs WHERE FIND_IN_SET(attaid,#{attids})
用Show Processlist查看,发现经常有上面那句sql,而且mysql经常讲cpu的使用率占到100以上,该加的索引都加了。
解决方案:
分析下原因:ASK与attach的关系是1对多的关联,如楼主那样的配置出来的结构肯定是需要关联查询的。如何解决这样的关联查询呢? 在mapper.xml中不配置这样的关联关系,用程序来控制关联关系。这样就避免了数据库查询时关联查询导致的高IO读取问题,也就降低了CUP的占用。
2013年5月09日 20:53
anduo1989
35
004
添加评论
00数据量特别大,attids字段有索引的话建议拼写sql,SELECT * FROM attachs where attids = 8 union ELECT * FROM attachs where attids = 8这种形式2013年5月09日 14:12
zyn010101
2349
13129
添加评论
00SELECT * FROM attachs WHERE FIND_IN_SET(attaid,#{attids}) 因为这是全表扫描 建议改成attaid in (?) 子查询
问题maper:
Xml代码
<resultMaptype="com.ozing.dayi.domains.Ask"id="basicAskRsMapper">
......省略其他
<associationproperty="attachList"column="attids"select="com.ozing.dayi.persistence.AttachMapper.findAttachListByIds"/
</resultMap>
附件findAttachListByIds的sql如下:
Sql代码
SELECT * FROM attachs WHERE FIND_IN_SET(attaid,#{attids})
用Show Processlist查看,发现经常有上面那句sql,而且mysql经常讲cpu的使用率占到100以上,该加的索引都加了。
解决方案:
分析下原因:ASK与attach的关系是1对多的关联,如楼主那样的配置出来的结构肯定是需要关联查询的。如何解决这样的关联查询呢? 在mapper.xml中不配置这样的关联关系,用程序来控制关联关系。这样就避免了数据库查询时关联查询导致的高IO读取问题,也就降低了CUP的占用。
2013年5月09日 20:53
anduo1989
35
004
添加评论
00数据量特别大,attids字段有索引的话建议拼写sql,SELECT * FROM attachs where attids = 8 union ELECT * FROM attachs where attids = 8这种形式2013年5月09日 14:12
zyn010101
2349
13129
添加评论
00SELECT * FROM attachs WHERE FIND_IN_SET(attaid,#{attids}) 因为这是全表扫描 建议改成attaid in (?) 子查询
相关文章推荐
- mybatis中 find_in_set 与in的使用
- mybatis中 find_in_set 与in的使用
- mysql中FIND_IN_SET的使用方法
- Windows2008上使用WMI时Lsass.exe占用CPU过高
- 解决WordPress被利用xmlrpc.php导致VPS CPU内存占用过高问题
- Scanner.findInLine()与while的使用莫名其妙的导致NoSuchElementException: No line found
- mysql中find_in_set()函数的使用
- 关于使用WindowsUpdate 或 Windows 自动升级时碰到的 svchost.exe 进程 CPU 资源占用过高的问题的相关信息
- mysql中FIND_IN_SET的使用方法
- mybatis使用bug:org.apache.ibatis.builder.IncompleteElementException: Could not find parameter map java
- mysql中find_in_set()函数的使用详解
- JAVA中hashmap.get()导致CPU占用过高问题
- Ubuntu下使用搜狗输入法出现fcitx进程CPU占用过高情况
- Mysql中的find_in_set的使用方法介绍
- Mysql中的find_in_set的使用方法
- SQL语句:find_in_set的使用方法
- 使用find_in_set()函数的注意事项
- mysql进阶:find_in_set的使用例子
- TP 查询语句中如何使用 FIND_IN_SET 这样的查询方法
- mysql中find_in_set()函数的使用