繁体   English   中英

为什么MySQL不使用索引

[英]Why MySQL doesn't use the index

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

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

结果是

结果1 http://snag.gy/SusqF.jpg

第二个

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

结果是

结果2 http://snag.gy/ZgOXQ.jpg

确保正义

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

返回一行

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

和销售指标结构

销售指数结构http://snag.gy/we3HL.jpg

谢谢!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM