我有这个问题;我有两个表,一个叫“ 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/