gpt4 book ai didi

mysql - 为什么MySQL不使用索引

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

我正在运行这两个不同的查询,我不明白为什么第一个销售表索引没有被使用

EXPLAIN SELECT COUNT(`sale`.`saleId`) AS `nb`
FROM `sale`
WHERE `sale`.`saleTransactionId` IN (
SELECT `transaction`.`transactionId`
FROM `transaction`
WHERE `transaction`.`transactionId` = 87587
)

结果是

result 1 http://snag.gy/SusqF.jpg

第二个

EXPLAIN SELECT COUNT(`sale`.`saleId`) AS `nb`
FROM `sale`
WHERE `sale`.`saleTransactionId` IN (87587)

结果是

result 2 http://snag.gy/ZgOXQ.jpg

只是为了确定

SELECT `transaction`.`transactionId`
FROM `transaction`
WHERE `transaction`.`transactionId` = 87587

只返回一行

saleTransactionId 是 INT(11) 作为 transactionId两个表都使用 MyISAM

和销售索引结构

sale index structure http://snag.gy/we3HL.jpg

谢谢!

最佳答案

因为子查询是一个依赖子查询(由于 MySQL 的工作方式)。这意味着内部查询的结果取决于外部查询。因此,索引不能用于外部查询,因为内部查询依赖于它的结果。听起来有悖于直觉,但这就是正在发生的事情。

至于解决方案:不要使用子查询。使用 JOIN。

SELECT COUNT(saleId) AS nb
FROM sale
JOIN transaction ON (saleTransactionId = transactionId)
WHERE transactionId = 87587

关于mysql - 为什么MySQL不使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20102905/

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