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

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

表A
id | dateA |其他

表B
id | id_tablea | dateb1 | sold | dateb2


这些表之间的连接很简单,我的问题是何时必须按日期进行过滤。根据需要,我必须使用d

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

这是查询的示例:

选择*从

左联接
ta.id = tb.id_tablea上的tableB tb
哪里

if(tb.sold = 1,tb.dateb2,(IFNULL(tb.dateb1,ta.datea1))

在“ INT1”和“ INT2”之间
AND>
...


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

提前致谢

最佳答案

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

我假设如果卖出的日期还不是1,则dateb2无效或可以带有任意值。然后,只要已售出!= 1,就可以使dateb2等于dateb1。然后,无论是否设置了已售出,都可以始终在dateb2上进行选择。

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

如果以上假设是错误的,则可以考虑增加一个列dateb3,如果sold == 1,则该列等于dateb2,否则等于dateb1,并带有一个dateb3上的索引。

关于mysql - 由于多个日期字段导致MySQL性能问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36770580/

10-09 13:15