数据库:MySql
我有两个表Student,由外键关系链接的类如下:
create table class
(
id int(10) not null,
primary key(id)
);
create table Student(
id int(10) not null,
cid int(10) not null,
constraint foreign key(cid) references class(id)
);
这两个表都有6000多行。
现在,当我进行内连接时,如下所示:
select * from Student inner join class on Student.ci = class.id
解释计划似乎只在表格上使用索引。它在其他上使用全表扫描。我认为它应该在两个表上使用索引。
索引显示在EXPLAIN PLAN中的可能键中但未使用...
答案 0 :(得分:0)
执行SHOW CREATE TABLE
以查看为您构建的索引。
对于这一个查询(select * from Student inner join class on Student.ci = class.id
),您需要
Student: INDEX(ci) and/or
class: INDEX(id)
由于PRIMARY KEY
是一个索引,因此您已经拥有class
所需的内容。
为什么"全扫描"?因为你没有给出一个WHERE
条款来说你想要一个小于完整扫描的东西。
对于类似的查询,优化程序将
这是执行该查询的最佳方式。
当EXPLAIN
说"使用索引"这意味着它正在使用"覆盖索引"。这就是可以在索引中完成所有工作,而无需查看数据。
(如果你向我们展示了EXPLAIN
,我可以更明确。