mysql表结构
答案 0 :(得分:0)
简而言之,我使用的是mysql数据库
执行
EXPLAIN
SELECT * FROM t_teacher_course_info
WHERE teacher_id >1 and teacher_id < 5000
将使用索引INDEX `idx_teacher_id_last_update_time` (`teacher_id`, `last_update_time`)
但是如果改变范围
EXPLAIN
SELECT * FROM t_teacher_course_info
WHERE teacher_id >1 and teacher_id < 10000
id select_type表类型possible_keys键key_len ref rows Extra
1 1 SIMPLE t_teacher_course_info ALL idx_teacher_update_time 671082使用位置
扫描所有表,不使用索引,任何mysql配置 也许扫描行数判断是否使用索引。 !!!!!!!
答案 1 :(得分:0)
这就是发生的事情。它实际上是一种优化。
使用辅助密钥(例如INDEX(teacher_id)
)时,处理如下:
1
)然后向前扫描(直到5000
或10000
)非常有效。SELECT *
)。这使用PRIMARY KEY
,其副本位于辅助密钥中。 PK和数据聚集在一起;每个查找一个PK值是有效的(再次,BTree),但你需要做5000或10000。因此,成本(所花费的时间)加起来。 A&#34;表扫描&#34; (即,不使用任何INDEX
)如下所示:
WHERE
子句(teacher_id
上的范围)。如果需要查看超过20%表的内容,表扫描实际上比在二级索引和数据之间来回弹跳更快。
所以,&#34;大&#34;大概在20%左右。实际值取决于表统计等。
底线:让优化器做它的事情; 大多数它最清楚的时间。