由于多个日期字段导致MySQL性能问题

时间:2016-04-21 13:07:09

标签: mysql performance

我有这个问题;我有两个表,一个叫做tableA,另一个叫tableB。

在两个表之间存在关系1:n,并且在两个表中都有日期字段;让我用一个例子来解释

TableA
id|dateA|others

TableB
id|id_tablea|dateb1|sold|dateb2

这些表之间的连接是微不足道的,我的问题是当我必须按日期过滤时;作为要求,我必须使用d

1)dateb2当且仅当售出= 1时(如果在tableb上有记录) 2)else dateb1(如果tableb上的记录存在) 3)datea1

这是一个查询示例:

SELECT * FROM
tableA ta
LEFT JOIN
tableB tb on ta.id = tb.id_tablea
WHERE 
(
if(tb.sold=1,tb.dateb2,( IFNULL(tb.dateb1,ta.datea1))
)
BETWEEN 'INT1'  AND 'INT2'
AND >
...

我的问题是两个表都很大,查询需要很长时间;我该如何优化此查询?任何想法?

提前致谢

1 个答案:

答案 0 :(得分:0)

一个想法可能是摆脱if / else:

我假设如果卖出还不是1,则dateb2无效或可以携带任意值。然后,只要卖出,你就可以将dateb2保持等于dateb1!= 1.然后你可以随时选择dateb2,无论是否设置了售卖。

现在你可以为dateb2创建一个索引,这也可能会提高性能。

如果上述假设是错误的,您可以考虑使用额外的列dateb3,如果出售== 1,则保持等于dateb2,否则等于dateb1,以及dateb3上的索引。

相关问题