我有这个问题;我有两个表,一个叫做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 > ...
我的问题是两个表都很大,查询需要很长时间;我该如何优化此查询?任何想法?
提前致谢
答案 0 :(得分:0)
一个想法可能是摆脱if / else:
我假设如果卖出还不是1,则dateb2无效或可以携带任意值。然后,只要卖出,你就可以将dateb2保持等于dateb1!= 1.然后你可以随时选择dateb2,无论是否设置了售卖。
现在你可以为dateb2创建一个索引,这也可能会提高性能。
如果上述假设是错误的,您可以考虑使用额外的列dateb3,如果出售== 1,则保持等于dateb2,否则等于dateb1,以及dateb3上的索引。