gpt4 book ai didi

mysql - JOIN情况下Mysql索引如何工作?

转载 作者:行者123 更新时间:2023-11-29 11:36:48 25 4
gpt4 key购买 nike

假设我有两个表patentpersonMysql查询如下。

select fname , lname 
from patient p
left join per on (per.person_id=p.person_id)
where p.account_id=2 and (per.fname like 'will%' OR per.lname like 'will%' ).

在此查询中,mysql 将如何使用在 (p.account_id,p.person_id)

上创建的索引

person_idpatent 表中 person 表的外键。 .

最佳答案

我怀疑你不想要LEFT。使用LEFT JOIN,您正在询问帐户#2,无论他是否名为“will”。

SELECT fname, lname
FROM patient p
JOIN per ON per.person_id = p.person_id
WHERE p.account_id = 2
AND (per.fname LIKE 'will% OR per.lname LIKE 'will%')

如果是“遗嘱”,将找到帐户 #2 的全名,否则不返回任何内容。

您没有说明您有哪些索引,因此我们无法解释您现有的索引。请为每个表提供SHOW CREATE TABLE

对于任一版本的查询,这些索引是唯一有用的索引:

p:  INDEX(account_id)  -- if it is not already the PRIMARY KEY
per: INDEX(person_id) -- again, if it is not already the PRIMARY KEY.

PRIMARY KEY 是一个UNIQUE 索引。

第一个索引(或 PK)将是快速查找,以查找包含 account_id=2 的行。第二个将使连接工作良好。由于 OR,索引对“will”没有用处。

查询将首先使用“嵌套循环连接”查看patent,然后查看per

还请提供EXPLAIN SELECT ...,以便我们可以讨论我猜测的事情。

关于mysql - JOIN情况下Mysql索引如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36447571/

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