我想知道是否有办法进行此查询并以比现在构建的更快的方式获得结果。也许与左连接或左右?我不确定?
Base = databaseFunctions.createBase(engine)
答案 0 :(得分:1)
您的查询结构很好,甚至可能比left join
更好。此查询将受益于组合索引。一个显而易见的是area_sector(cs_lastactivate, cs_repeated)
或area_sector(cs_repeated, cs_lastactivate)
,取决于哪个列更具选择性(即选择最少的行数)。
另一个明显的指标是:calls(call_sector, time_of_call, calling_number)
。
然后appointments(app_created, app_callingnr)
上的索引和sales
上的类似索引应该是有用的。这有点难以说,因为你的列没有表别名,因此不清楚它们来自哪些表。
答案 1 :(得分:0)
首先,查询非常混乱。我建议你将这些子查询更改为视图。然后你可以使用连接(连接类型取决于你想要得到什么)。无论如何,如果将其更改为连接,查询将更快,因为如果使用子查询,则必须为主查询中的每一行评估每个子查询。
最后,考虑在join语句中使用的列上添加索引,如果这些表中有大量数据,那么它应该也是一个很好的性能改进。