我有一个在 WHERE 子句中带有 CASE WHEN 条件的函数。简单(非常简单)它看起来像这样:
SELECT *
FROM mytable t
WHERE (
CASE aPARAM WHEN 'a' THEN t.a = aID
WHEN 'b' THEN t.b = aID
WHEN 'c' THEN t.c = aID
ELSE TRUE END
)
aPARAM 和 aID - 函数参数
a、b 和 c - 表“mytable”的索引列
但在这种情况下,MySQL 根本不使用索引。
是的,此查询包含选择另一个条件的条件,但它不依赖于结果值,并且可以在查询执行之前计算(定义)。
什么可以使用建议这个函数来使用索引?
最佳答案
Case是MySQL不能使用索引的表达式。尝试将案例转换为一堆 or
条件,如下所示:
SELECT *
FROM mytable t
WHERE (t.a = aID and aPARAM = 'a')
or (t.b = aID and aPARAM = 'b')
or (t.c = aID and aPARAM = 'c')
or (aPARAM not in ('a','b','c'))
关于mysql - 带有索引列的 WHERE 子句中的 "CASE WHEN",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47691688/