MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 6688|回复: 8
打印 上一主题 下一主题

[SQL类] MYSQL数据库疯了,CPU占用99%,如何优化?

[复制链接]
跳转到指定楼层
1#
发表于 2011-4-18 16:35:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
打开一个页面.只执行了一条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条

如何优化这个语句?



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏1 分享淘帖 顶 踩
2#
发表于 2011-4-19 10:15:29 | 只看该作者
主要是先看执行计划:explain
Pers_Depart字段要有索引
MySQL中子查询效果不好,尤其是当子集数据很大时,所以,尽量改成两表联合查询的方式
Pers_Operate用不上索引

3#
发表于 2011-5-12 15:37:36 | 只看该作者
.飘过。
4#
发表于 2011-5-13 09:35:25 | 只看该作者
以我的经验  not in 在mysql中的查询速度不佳,尽量改成表连接的方式吧。 数据量应该还不算太大
5#
发表于 2011-5-14 22:59:27 | 只看该作者
把两个表的表结构和index发下
6#
发表于 2011-9-15 13:16:21 | 只看该作者
,,,,,
发具体表信息
7#
发表于 2013-3-18 11:54:21 | 只看该作者
personal表增加一个tinyint字段has_expand,默认值为0,插入expand表的时候,把has_expand设置为1。查询的时候就不用子查询了。
8#
发表于 2013-3-22 13:58:58 | 只看该作者
减少表连接,使用索引
9#
发表于 2013-4-26 16:42:53 | 只看该作者
5.6之前的版本尽量用联合查询吧,尽量不要用子查询;在你查询的条件列上加索引,查看执行计划是否走了索引。这样应该要快些了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-2 13:18 , Processed in 0.072748 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表