gpt4 book ai didi

mysql - 什么会导致此查询使用 50% 的 CPU?

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

当我执行这个查询时,它似乎导致 mysqld.exe 进程使用了​​我 50-100% 的 cpu。

任何想法为什么。

SELECT m.draw_id , m.mobile, m.fly_buys, m.signup_date,
IF(m.club = 1, 'Yes', 'No') AS club,
IF(w.code != '', w.code,
IF(f.code != '', f.code,
IF(t.code != '', t.code, 'Unknown') ) ) AS code,
IF(w.code != '', 'General',
IF(f.code != '', '5 pt',
IF(t.code != '', '10 pt', 'Unknown') ) ) AS code_type
FROM action_6_members m
LEFT JOIN action_6_5pts f ON f.member_id = m.id
LEFT JOIN action_6_10pts t ON t.member_id = m.id
LEFT JOIN action_6_weekly w ON w.member_id = m.id
WHERE `draw_id` = '3' ORDER BY m.id DESC limit 0, 20;

注意:这不会返回大量数据(10 行)。
注意:虽然只返回了10行
action_6_5pts 包含 40k 行
action_6_10_pts 包含 25k 行
action_6_weekly 包含 350 万行。


更新
所以我添加了一个索引,它现在运行得更好了。

这是基本表示意图。

action_6_5pts/10pts/weekly 都是

代码 |成员(member)编号

CREATE TABLE `action_6_5pts` (
`code` varchar(255) NOT NULL,
`member_id` int(11) NOT NULL,
PRIMARY KEY (`code`),
KEY `member_id` (`member_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

action_6_members 是编号 |飞买 |布拉 |布拉 |啦啦啦

CREATE TABLE `action_6_members` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`draw_id` int(11) NOT NULL,
`mobile` varchar(255) NOT NULL,
`fly_buys` varchar(255) NOT NULL,
`signup_date` datetime NOT NULL,
`club` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1

所以,

我需要返回成员的代码类型和实际代码。

此信息未存储在任何地方,我能看到的获取它的唯一方法是根据每个用户的 member_id 对表进行连接。

有没有更快/更好的方法在不改变表结构的情况下做到这一点?

最佳答案

因为你的查询非常强大

40k x 25k x 3.5m

需要考虑连接的行。您是否对联接中使用的所有列编制了索引?

http://www.wolframalpha.com/input/?i=40000+x+25000+x+3500000

那是很多数据。

关于mysql - 什么会导致此查询使用 50% 的 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3410680/

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