gpt4 book ai didi

mysql - 在外键关系中进行内部连接时应该使用什么索引

转载 作者:行者123 更新时间:2023-11-30 22:19:14 25 4
gpt4 key购买 nike

数据库: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 中可能的键中,但未使用...

最佳答案

执行 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,我可以更明确。`

关于mysql - 在外键关系中进行内部连接时应该使用什么索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37136948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com