mysql - 需要简单查询的索引
问题描述
任何人都可以建议一个好的索引来使这个查询运行得更快吗?
SELECT
s.*,
sl.session_id AS session_id,
sl.lesson_id AS lesson_id
FROM
cdu_sessions s
INNER JOIN cdu_sessions_lessons sl ON sl.session_id = s.id
WHERE
(s.sort = '1') AND
(s.enabled = '1') AND
(s.teacher_id IN ('193', '1', '168', '1797', '7622', '19951'))
解释:
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra
1 | SIMPLE | s | NULL | ALL | PRIMARY | NULL | NULL | NULL | 2993 | 0.50 | Using where
1 | SIMPLE | sl | NULL | ref | session_id,ix2 | ix2 | 4 | ealteach_main.s.id | 5 | 100.00 | Using index
cdu_sessions 看起来像这样:
------------------------------------------------
id | int(11)
name | varchar(255)
map_location | enum('classroom', 'school'...)
sort | tinyint(1)
sort_titles | tinyint(1)
friend_gender | enum('boy', 'girl'...)
friend_name | varchar(255)
friend_description | varchar(2048)
friend_description_format | varchar(128)
friend_description_audio | varchar(255)
friend_description_audio_fid | int(11)
enabled | tinyint(1)
created | int(11)
teacher_id | int(11)
custom | int(1)
------------------------------------------------
cdu_sessions_lessons 包含 3 个字段 - id、session_id 和 course_id
谢谢!
解决方案
如果不查看每个表上的查询计划、行数和分布,很难预测一个好的索引以使其运行得更快。
但是,我想说这可能会有所帮助:
> create index sessions_teacher_idx on cdu_sessions(teacher_id);
推荐阅读
- python - 将 Pandas datetimeindex 的频率从每天更改为每小时,以根据每日重采样数据的条件选择每小时数据
- google-bigquery - BigQuery:超过对列分区表的分区修改次数的配额
- javascript - 如何在 jquery for 循环中使用字符串替换?
- java - 实现必须从不同线程添加/删除元素的元素列表的最佳方法是什么?
- python - 没有参数的 Pytest 有错误的工作目录
- python - 无法在 jupyter 笔记本中导入 rmagic
- c++11 - 包括自身在内的 C++ 文件
- ios - Dropbox HTTP 端点挂起并抛出超时
- c# - EF Core 继承问题 (HasDiscriminator)
- javascript - 按类名选择时如何使用 JavaScript 在子节点上查找某些文本