由于WHERE筛选器,来自多个表的MySQL请求速度较慢

由于WHERE筛选器,来自多个表的MySQL请求速度较慢,mysql,request,performance,Mysql,Request,Performance,我使用request从10个表中选择数据,最后我有WHERE和2个条件 第一种方法很简单,但第二种方法即使在没有结果返回的情况下,速度也会显著减慢 AND (eligible_users.id IS NULL OR ((eligible_users.program = 3 AND eligible_users.status = 0) OR eligible_users.status = 35)) 当我删除它时,页面加载速度会快得多,是否有办法使其更快,但仍保留此筛选器,因为我需要它。如果查

我使用request从10个表中选择数据,最后我有WHERE和2个条件 第一种方法很简单,但第二种方法即使在没有结果返回的情况下,速度也会显著减慢

AND (eligible_users.id IS NULL OR 
((eligible_users.program = 3 AND eligible_users.status = 0) 
OR eligible_users.status = 35))

当我删除它时,页面加载速度会快得多,是否有办法使其更快,但仍保留此筛选器,因为我需要它。

如果查询中有3个OR语句,请尝试将它们拆分为1个或多个联合,如下所示:

select ...
where ... 
eligible_users.id IS NULL 
UNION
select ...
where ...
(eligible_users.program = 3 AND eligible_users.status = 0) 
OR eligible_users.status = 35

添加两个索引,一个用于程序,一个用于状态,可能会大大加快速度。

您对查询进行了解释吗?它说了什么?也许你需要在“状态”栏上建立一个索引。您可以这样添加它:
createindex status\u对符合条件的用户创建索引(status)同样,我支持@jasonbar所说的。EXPLAIN的输出将解释如何计算查询。它会告诉您是否在任何地方缺少索引。您指的是表本身中的索引,即使它们没有在中使用request@JohnU43是的,表上的索引,针对这些特定字段。索引应该有助于数据库更快地评估where子句。因此,我不能使用order,因为它的工作原理与where子句的工作原理不同query@JohnU43是的,您可以:
select*from(select…union select…)t order by t.your_列