请帮忙看看如下这样的业务场景,如何设计MYSQL索引,查询效率最优?

发布于 2022-09-05 10:52:31 字数 1271 浏览 14 评论 0

表定义如下:

CREATE TABLE course_type (
id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
publisher_id int(10) unsigned DEFAULT '0' COMMENT '出版方id',
uid int(10) unsigned DEFAULT '0' COMMENT '创建者uid',
name varchar(20) DEFAULT '' COMMENT '名称',
ctime int(5) unsigned DEFAULT '0' COMMENT '创建时间',
utime int(5) unsigned DEFAULT '0' COMMENT '最后修改时间',
status tinyint(1) DEFAULT '0' COMMENT '状态:0:正常;-1:已删除;',
KEY id (id) USING HASH
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8 COMMENT='课程分类信息表';

业务查询逻辑语句如下:

explain SELECT * FROM t_x_course_type WHERE publisher_id = 198 AND status = 0 order by id;(前端列表页面,查询频繁度高)

explain SELECT * FROM t_x_course_type WHERE uid = 30258120 AND status = 0 order by id;(用户添加分类页面)

explain SELECT count(id) FROM t_x_course_type WHERE uid = 30258120 AND status = 0;(用户添加分类页面)

explain SELECT count(id) FROM t_x_course_type WHERE uid = 30258120 AND publisher_id = 198 AND name = '中国武术1' AND status = 0;(用户添加分类页面)

请大神帮忙看看如上这种业务场景,如何为数据库添加索引效率最优?谢谢指点!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月亮是我掰弯的 2022-09-12 10:52:31

一条条来

1 SELECT * FROM t_x_course_type WHERE publisher_id = 198 AND status = 0 order by id;

索引为publisher_id, status, id

explain

1    SIMPLE    course_type        ref    publisher_id    publisher_id    7    const,const    1    100.00    Using index condition

2 SELECT * FROM t_x_course_type WHERE uid = 30258120 AND status = 0 order by id;

索引为uid,status,id

explain

1    SIMPLE    course_type        ref    uid    uid    7    const,const    1    100.00    Using index condition

3 SELECT count(id) FROM course_type WHERE uid = 30258120 AND status = 0;

索引不用加新的,使用第二条的即可,因为索引有覆盖

explain

1    SIMPLE    course_type        ref    uid    uid    7    const,const    1    100.00    Using index

4 explain SELECT count(id) FROM course_type WHERE uid = 30258120 AND publisher_id = 198 AND name = '中国武术1' AND status = 0;

索引不用加,mysql会自动从第1条索引和第2条索引中选出能筛选出较少数据的一条作为索引查询,一个用户下面的 name 数据应该不多

1    SIMPLE    course_type        ref    publisher_id,uid    publisher_id    7    const,const    1    50.00    Using where
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文