mysql 百万级数据存储过程有什么优化方法吗

qq_23141709 2017-12-22 03:20:58
DROP PROCEDURE IF EXISTS `proc_battleinfo`;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_battleinfo`(IN userid INT,IN gid INT)
BEGIN
SET NAMES utf8mb4;
SELECT drawid,roomid,bureau,gameplayer,basescore,playmethod,
max(case when chairid=0 THEN UNIX_TIMESTAMP(concludetime) END) AS concludetime,
max(case when chairid=0 THEN nickname END) AS na0,
max(case when chairid=1 THEN nickname END) AS na1,
max(case when chairid=2 THEN nickname END) AS na2,
max(case when chairid=3 THEN nickname END) AS na3,
max(case when chairid=0 THEN id END) AS uid0,
max(case when chairid=1 THEN id END) AS uid1,
max(case when chairid=2 THEN id END) AS uid2,
max(case when chairid=3 THEN id END) AS uid3,
sum(case when chairid=0 THEN score END) AS score0,
sum(case when chairid=1 THEN score END) AS score1,
sum(case when chairid=2 THEN score END) AS score2,
sum(case when chairid=3 THEN score END) AS score3,
max(case when chairid=0 THEN CONCAT(UNIX_TIMESTAMP(starttime),gid,roomid) END) AS replay
FROM (SELECT a.drawid,b.id,b.chairid,b.score,b.starttime,b.concludetime,b.roomid,b.nickname,b.bureau,b.gameplayer,b.basescore,b.playmethod
FROM (SELECT distinct drawid FROM draw_score WHERE id=userid AND gameid = gid
AND concludetime >= date_sub(NOW(),INTERVAL 48 HOUR)) AS a left join draw_score b
ON b.drawid = a.drawid) AS aa GROUP BY drawid ORDER BY drawid DESC limit 10;

END
;;

DELIMITER ;






各位大神,看看这个存储过程能优化吗
...全文
441 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小野马1209 2017-12-25
  • 打赏
  • 举报
回复
建立合适的索引确实查询效率可以加快很多,不然要全表进行检索
zjcxc 2017-12-25
  • 打赏
  • 举报
回复
原来索引都没有嗦
ChinaITOldMan 2017-12-22
  • 打赏
  • 举报
回复
楼上牛人多来指点下。
卖水果的net 2017-12-22
  • 打赏
  • 举报
回复
楼主自已解决了问题,赞一个; 希望楼主常来论坛,帮助其他的网友解决问题。
qq_23141709 2017-12-22
  • 打赏
  • 举报
回复
已经解决了,不需要优化存储过程,为表建立索引就可以极大的优化查询速度了


这是建立索引后的explain

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧