Mysql 查询中的条件速度
给定两个参数时,根据相同的数据得出相同的结果。在SELECT CASE WHEN处添加条件是否会使查询比将其放置在WHERE处更快Mysql 查询中的条件速度,mysql,sql,Mysql,Sql,给定两个参数时,根据相同的数据得出相同的结果。在SELECT CASE WHEN处添加条件是否会使查询比将其放置在WHERE处更快 /*On SELECT*/ SELECT COUNT(*) as totaal, SUM(general_score_filter.dash) as totaal_score FROM ( SELECT operatie.id as op
/*On SELECT*/
SELECT
COUNT(*) as totaal,
SUM(general_score_filter.dash) as totaal_score
FROM (
SELECT
operatie.id as operatie_id,
AVG(CASE WHEN patient.inactief = 0 AND vraag.eigenschap_id = _eigenschap_id THEN antwoord.score ELSE 0 END) AS dash
FROM
operatie
LEFT JOIN antwoord ON operatie.id = antwoord.operatie_id AND antwoord.deleted = 0
LEFT JOIN vraag ON vraag.id = antwoord.vraag_id AND vraag.deleted = 0
LEFT JOIN patient ON operatie.patient_id = patient.id AND patient.inactief = 0
GROUP BY operatie.id) AS general_score_filter;
/*On WHERE*/
SELECT
COUNT(*) as totaal,
SUM(general_score_filter.dash) as totaal_score
FROM (
SELECT
operatie.id as operatie_id,
AVG(CASE WHEN vraag.eigenschap_id = _eigenschap_id THEN antwoord.score ELSE 0 END) AS dash
FROM
operatie
LEFT JOIN antwoord ON operatie.id = antwoord.operatie_id AND antwoord.deleted = 0
LEFT JOIN vraag ON vraag.id = antwoord.vraag_id AND vraag.deleted = 0
LEFT JOIN patient ON operatie.patient_id = patient.id AND patient.inactief = 0
WHERE
patient.inactief = 0
GROUP BY operatie.id) AS general_score_filter;
这完全取决于您的数据量。您可能不会注意到50k-100k的小数据集,但如果有数百万行,您会注意到 但是总的来说,是的,在WHERE子句中使用一个关于不活动状态的索引会更快。根据下面的示例数据,您将跳过所有Inacticef=1记录,但其中一条记录对您的答案更准确。您想要所有人,还是只想要那些不活动EF=0的人。阅读下面的更多内容 示例,其中包含Operatie表中的以下记录
id inactief score (via the join to antwoord)
1 0 10
1 0 20
1 1 30
1 0 40
1 1 50
1 1 60
1 0 70
2 1 15
2 1 25
3 0 38
假设您的第一次查询,您的最终计数将包含所有3名患者1、2和3。您的第二个count where子句inactief=0将只返回2个患者1和3,因为患者2的所有记录都是inactief=1
此外,我同意否决投票。如果你对某件事有意见,并且投了反对票,至少告诉我是怎么回事,这样我以后可以更好地处理我的帖子。。。有些人只是喜欢粗鲁,但你能做什么。你需要提供更多的背景。举一个你正在询问的问题的例子会有所帮助。CASE和WHERE执行不同的操作-一个更改列的值,另一个过滤行。所以你的问题的基础没有意义。在where子句中使用大小写表达式通常是个坏主意,因为它们更难优化。用户和/或结构。我更新了我的问题嗯,我只是问,我没有看到任何重复的问题。现在我得到了-2票。这些人怎么了?谢谢你,德拉普,这就是我要知道的。有时候事情看起来很简单,但人们只是想把它们复杂化:@JuanNguyen,一个800k声誉的人的评论无法理解你想要澄清什么?我想我做得很好:哦,在我添加一个例子之前,他只是留下了一条评论。但是他没有回来