gpt4 book ai didi

mysql - 就我而言,IN 和 INNER JOIN 之间有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:27 26 4
gpt4 key购买 nike

在我的 MySQL 数据库中,表 events 有一个包含列 closingeventid、timeStart 和 eventCode 的复合索引。表事件中有超过 2100 万行。

这里有两个 SQL,如果我在 MySQL 命令行中运行第一个,进程 mysqld-nt.exe 的 Mem Usage 以每秒 10 M 的速度逐渐增加,它上升到 1.6 G 左右,然后直线下降到 30 M 左右。然后命令行返回 Out of Memory 异常。

但是,如果我使用第二个 SQL,使用 INNER JOIN 而不是 IN 就没问题。似乎 IN 子句没有命中任何索引。

为什么?有没有像 MS SQL 的执行计划一样监控 MySQL 执行过程的想法?

SELECT COUNT(*) AS 'cnt' 
FROM events
WHERE
(timeStart < '2010-09-22 14:29:10’)
AND (closingeventid IS NULL)
AND (eventcode IN (SELECT DISTINCT evtcclosed FROM eventclose))`

对比

SELECT COUNT(1) AS 'cnt' 
FROM events
inner join
(SELECT DISTINCT evtcclosed FROM eventclose) ec
ON ec.evtcclosed = events.eventcode
WHERE (timeStart < '2010-09-22 14:29:10’) AND (closingeventid IS NULL)

最佳答案

MySQL 优化器非常糟糕地优化了 IN (subquery) 子句。它对外部查询的每一行执行嵌套查询。

要获取执行计划 - 只需在查询之前添加 EXPLAIN 关键字

EXPLAIN SELECT ...

关于mysql - 就我而言,IN 和 INNER JOIN 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4048656/

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