MySQL社区

标题: MYSQL数据库疯了,CPU占用99%,如何优化? [打印本页]

作者: wayking    时间: 2011-4-18 16:35
标题: MYSQL数据库疯了,CPU占用99%,如何优化?
打开一个页面.只执行了一条SQL语句
SELECT * FROM `personal` WHERE `Pers_Depart`='中文'  AND  `Pers_Regis` NOT IN (SELECT `Exp_Num` FROM `expand`) AND `Pers_Operate` NOT LIKE '%销%' LIMIT 0,20

personal表数据大概2W条

expand数据表大概1W条

如何优化这个语句?




作者: kider    时间: 2011-4-19 10:15
主要是先看执行计划:explain
Pers_Depart字段要有索引
MySQL中子查询效果不好,尤其是当子集数据很大时,所以,尽量改成两表联合查询的方式
Pers_Operate用不上索引


作者: Winston    时间: 2011-5-12 15:37
.飘过。
作者: shyeagle    时间: 2011-5-13 09:35
以我的经验  not in 在mysql中的查询速度不佳,尽量改成表连接的方式吧。 数据量应该还不算太大

作者: hm3030    时间: 2011-5-14 22:59
把两个表的表结构和index发下
作者: devilkin    时间: 2011-9-15 13:16
,,,,,
发具体表信息
作者: 小新    时间: 2013-3-18 11:54
personal表增加一个tinyint字段has_expand,默认值为0,插入expand表的时候,把has_expand设置为1。查询的时候就不用子查询了。
作者: weiyz2011    时间: 2013-3-22 13:58
减少表连接,使用索引
作者: 末猪    时间: 2013-4-26 16:42
5.6之前的版本尽量用联合查询吧,尽量不要用子查询;在你查询的条件列上加索引,查看执行计划是否走了索引。这样应该要快些了。




欢迎光临 MySQL社区 (http://www.mysqlpub.com/) Powered by Discuz! X3.2