[sql 优化] 麻烦大佬看下这段 sql 怎么优化能快点

2020-05-11 10:39:31 +08:00
 zhaoxixiangban
CREATE TABLE `fx_share` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`share_id` varchar(36) NOT NULL COMMENT '分享 ID',
`share_channel_id` varchar(10) DEFAULT NULL COMMENT '分享渠道 ID',
`aim_id` varchar(36) NOT NULL COMMENT '分享目标 ID',
`share_url` varchar(255) DEFAULT NULL COMMENT '分享的链接',
`share_user_id` varchar(36) NOT NULL COMMENT '分享发起人(导购)',
`share_title` varchar(255) DEFAULT NULL COMMENT '分享的标题(预留字段)',
`share_extra` varchar(255) DEFAULT NULL COMMENT '分享的参数(预留字段)',
`watch_count` int(11) DEFAULT NULL COMMENT '浏览次数',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT NULL COMMENT '删除:0 未删除,1 删除',
`bind_status` varchar(5) DEFAULT 'true' COMMENT '绑定状态 用于顾客和导购绑定(为 0 时可以绑定,为 1 时不可以绑定)',
PRIMARY KEY (`id`,`share_id`) USING BTREE,
UNIQUE KEY `unx_shareid` (`share_id`) USING BTREE,
KEY `idx_userid` (`share_user_id`) USING BTREE,
KEY `idx_aim` (`aim_id`) USING BTREE,
KEY `create_time_index` (`create_time`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=811316 DEFAULT CHARSET=utf8mb4 COMMENT='分享表';


EXPLAIN SELECT
`share_user_id` AS `shoppingGuideId`,
count( share_user_id ) AS `statisticNum`
FROM
fx_share FORCE INDEX(create_time_index)
WHERE
create_time > '2020-01-01 00:00:03' AND create_time <'2020-06-28 16:55:03'
GROUP BY
`shoppingGuideId`
2913 次点击
所在节点    程序员
23 条回复
zhaoxixiangban
2020-05-13 13:40:40 +08:00
@kimchan #20 前面我没有去掉 “FORCE_INDEX”
947030638
2020-05-14 08:34:51 +08:00
联合索引不是有顺序吗?先执行 where 再执行 group,createtime 比 shareuserid 先执行,所以为啥是 share_user_id, create_time
zhaoxixiangban
2020-05-23 10:47:28 +08:00
@947030638 #22 这个我也没有想通,很费解,但是(share_user_id, create_time) 确实很快。18 楼说有范围查询的情况,没想通。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/670449

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX