12
返回列表 发新帖
楼主: linjia828

mysql索引优化问题

[复制链接]
论坛徽章:
55
体育版块博采纪念徽章
日期:2008-10-06 11:55:58双黄蛋
日期:2011-06-08 14:43:03茶鸡蛋
日期:2011-06-08 14:50:52迷宫蛋
日期:2013-07-03 14:58:31
11#
 楼主| 发表于 2011-6-15 12:10 | 只看该作者
上面的sql,如果建一个(summonerName ,userId )的索引是可以用到,查询时间从4.9s降到3.5s,但是查询的时候占用cpu使用率都是10%左右。

是不是数据库本身哪里设置有问题了,这样的一个语句占用这么大的cpu是个很大的问题的。

加上复合索引以后的执行计划:
mysql> explain select summonerName from lmo_player where 1 and userId = 34533051;  
+----+-------------+------------+-------+---------------+--------+---------+------+---------+--------------------------+
| id | select_type | table      | type  | possible_keys | key    | key_len | ref  | rows    | Extra                    |
+----+-------------+------------+-------+---------------+--------+---------+------+---------+--------------------------+
|  1 | SIMPLE      | lmo_player | index | userId        | userId | 768     | NULL | 4756048 | Using where; Using index |
+----+-------------+------------+-------+---------------+--------+---------+------+---------+--------------------------+

使用道具 举报

回复
论坛徽章:
8
双黄蛋
日期:2011-08-11 14:51:29蜘蛛蛋
日期:2011-08-15 20:53:08灰彻蛋
日期:2011-08-23 17:46:31ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292012新春纪念徽章
日期:2012-01-04 11:57:56咸鸭蛋
日期:2012-01-09 11:14:00紫蛋头
日期:2012-03-20 17:08:01优秀写手
日期:2013-12-18 09:29:14
12#
发表于 2011-6-15 13:39 | 只看该作者
索引应该建userId,ummonerName吧?
而且是不是结果集很大啊?

使用道具 举报

回复
论坛徽章:
55
体育版块博采纪念徽章
日期:2008-10-06 11:55:58双黄蛋
日期:2011-06-08 14:43:03茶鸡蛋
日期:2011-06-08 14:50:52迷宫蛋
日期:2013-07-03 14:58:31
13#
 楼主| 发表于 2011-6-15 13:53 | 只看该作者
原帖由 wanan_YLF 于 2011-6-15 13:39 发表
索引应该建userId,ummonerName吧?
而且是不是结果集很大啊?


上面的sql,如果建一个(summonerName ,userId )的索引是可以用到,查询时间从4.9s降到3.5s,但是查询的时候占用cpu使用率都是10%左右。

是不是数据库本身哪里设置有问题了,这样的一个语句占用这么大的cpu是个很大的问题的。

加上复合索引以后的执行计划:
mysql> explain select summonerName from lmo_player where 1 and userId = 34533051;  
+----+-------------+------------+-------+---------------+--------+---------+------+---------+--------------------------+
| id | select_type | table      | type  | possible_keys | key    | key_len | ref  | rows    | Extra                    |
+----+-------------+------------+-------+---------------+--------+---------+------+---------+--------------------------+
|  1 | SIMPLE      | lmo_player | index | userId        | userId | 768     | NULL | 4756048 | Using where; Using index |
+----+-------------+------------+-------+---------------+--------+---------+------+---------+--------------------------+

使用道具 举报

回复
论坛徽章:
8
双黄蛋
日期:2011-08-11 14:51:29蜘蛛蛋
日期:2011-08-15 20:53:08灰彻蛋
日期:2011-08-23 17:46:31ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292012新春纪念徽章
日期:2012-01-04 11:57:56咸鸭蛋
日期:2012-01-09 11:14:00紫蛋头
日期:2012-03-20 17:08:01优秀写手
日期:2013-12-18 09:29:14
14#
发表于 2011-6-15 14:12 | 只看该作者

回复 #13 linjia828 的帖子

额...可以用到是没错,可两个索引的执行计划是不一样的啊。全覆盖索引也不是这样用啊...
另外,我怀疑在这张表中userId = 34533051的结果集很大...

[ 本帖最后由 wanan_YLF 于 2011-6-15 14:24 编辑 ]

使用道具 举报

回复
论坛徽章:
55
体育版块博采纪念徽章
日期:2008-10-06 11:55:58双黄蛋
日期:2011-06-08 14:43:03茶鸡蛋
日期:2011-06-08 14:50:52迷宫蛋
日期:2013-07-03 14:58:31
15#
 楼主| 发表于 2011-6-15 15:55 | 只看该作者
原帖由 wanan_YLF 于 2011-6-15 14:12 发表
额...可以用到是没错,可两个索引的执行计划是不一样的啊。全覆盖索引也不是这样用啊...
另外,我怀疑在这张表中userId = 34533051的结果集很大...


结果集只有80条...

使用道具 举报

回复
论坛徽章:
8
双黄蛋
日期:2011-08-11 14:51:29蜘蛛蛋
日期:2011-08-15 20:53:08灰彻蛋
日期:2011-08-23 17:46:31ITPUB十周年纪念徽章
日期:2011-11-01 16:26:292012新春纪念徽章
日期:2012-01-04 11:57:56咸鸭蛋
日期:2012-01-09 11:14:00紫蛋头
日期:2012-03-20 17:08:01优秀写手
日期:2013-12-18 09:29:14
16#
发表于 2011-6-15 16:35 | 只看该作者

回复 #15 linjia828 的帖子

额...那怎么会不走userid这个索引...奇怪...
另外那个复合索引改掉的话,type类型是否会变为ref?

使用道具 举报

回复
论坛徽章:
55
体育版块博采纪念徽章
日期:2008-10-06 11:55:58双黄蛋
日期:2011-06-08 14:43:03茶鸡蛋
日期:2011-06-08 14:50:52迷宫蛋
日期:2013-07-03 14:58:31
17#
 楼主| 发表于 2011-6-15 19:18 | 只看该作者
mysql> explain select skinName, avg(`largest_critcal_strike`) as val, count(id) as times from lmo_player where 1 and YEARWEEK(lmo_player.creationTime,1) = YEARWEEK(now(),1) group by skinName;
+----+-------------+------------+------+---------------+------+---------+------+---------+----------------------------------------------+
| id | select_type | table      | type | possible_keys | key  | key_len | ref  | rows    | Extra                                        |
+----+-------------+------------+------+---------------+------+---------+------+---------+----------------------------------------------+
|  1 | SIMPLE      | lmo_player | ALL  | NULL          | NULL | NULL    | NULL | 4803138 | Using where; Using temporary; Using filesort |
+----+-------------+------------+------+---------------+------+---------+------+---------+----------------------------------------------+


另外这句改如何优化索引呢?lmo_player.creationTime是日期型,有人说改成字符型,然后 YEARWEEK(date(lmo_player.creationTime))这样会更优,可以走索引,是吗?

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
18#
发表于 2011-6-15 21:02 | 只看该作者
where 1 and ?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表