Mysql查询需要优化

Mysql查询需要优化,mysql,Mysql,从a.id中选择a.id、b.name 在a.lead\u id=b.lead\u id上左连接b 其中a.status='Created'和date(a.Created在此处输入code\u at)='2018-11-19'您可以在下面尝试- select a.lead_id, b.abc from table1 a left join table2 b on a.lead_id = b.lead_id where a.status = 'Created' and date(a.created

从a.id中选择a.id、b.name 在a.lead\u id=b.lead\u id上左连接b 其中a.status='Created'和date(a.Created
在此处输入code
\u at)='2018-11-19'

您可以在下面尝试-

select a.lead_id, b.abc from table1 a
left join table2 b on a.lead_id = b.lead_id
where a.status = 'Created' and date(a.created_at) = '2018-11-19'

您能否将查询分为两个单独的查询,然后根据在应用程序端使用的条件合并结果集?我认为,如果场景中有多个用户执行此操作,那么这将至少提供比现有场景更好的性能。 我的意思是:

查询-1:

select a.id from table1 a where a.status = 'Created' and date(a.createdenter code here_at) = '2018-11-19'
及 查询-2:

select b.lead_id, b.name from table2 b.
然后合并两个结果集。或者使用来自的.id列表(来自resultset) 查询-1结果使用查询-2的IN子句,即:

[如果根本没有a.id,则必须检查空列表]


我也提出了同样的问题。我花了一段时间才明白,尽管有所有这些子查询和in子句,原始查询仍会执行此操作。表a和b都有大型数据集从表1中选择a.lead_id,b.abc在a.lead_id=b.lead_id上左连接表2 b,其中a.status='Created'和date(a.Created_at)='2018-11-19'@Narendra Rawat:这是一个直截了当的查询。不要试图为了“优化”它而干预它。而是提供适当的索引。我的建议是:
在a(状态,创建时间,领导id)上创建索引idxa
在b(领导id,abc)上创建索引idxb
。这两个索引都是先授予对所需a记录的快速访问权限,然后与b高效连接的索引。除了将表2行与表1行外部连接外,您还想实现什么特别的功能吗?我认为fa06在他们的回答中是正确的,你实际上所做的只是一个简单的外部连接。(不过,您的查询中存在复制和粘贴错误。您将其称为table1,但使用名称lead访问该表。)下次请告诉我们所涉及的表,特别是唯一键是什么。这可能会有所不同。显示示例表数据和结果也总是很有帮助的。上面的注释是指最初发布的查询。现在显示的查询是fa06答案中建议的查询@纳伦德拉·拉瓦特:不要如此彻底地改变你的要求。请不要忽略评论。我告诉过你,你应该提供更多关于表格的信息,并展示样本数据。您完全更改了请求,甚至没有对此做出反应。对于SQL优化请求,您应该:1)描述表,2)列出所有现有索引,3)显示执行计划()。(但现在请看我对fa06答案的评论。我认为这个查询已经很好了。您所要做的就是创建适当的索引。)
select b.lead_id, b.name from table2 b where b.lead_id IN( all your a.ids here)