如何使用不同的过滤器改进来自相同 table 的不同值的 UNION

How to improve UNION of distinct values from the same table with different filters

背景: 客户可以创建自己的车辆库存。这意味着他只能展示符合他标准的车辆。 他还可以为用户创建前端过滤器。这些过滤器可以在它们之间同步。例如,如果用户从筛选器 X 中选择某些内容,则筛选器 Y 仅显示与 X 筛选器匹配的值

性能问题在于用值填充前端过滤器。 我试过的是这样的

;with v as(  
select something from vehicles  
where [his stock filters])  
select 'XFilter',X_id from v where Y_id > [value] and Z_id > [value] 
union  
select 'YFilter',Y_id from v where X_id > [value] and Z_id > [value] 
union  
select 'ZFilter',Z_id from v where X_id > [value] and Y_id > [value] 
union 
...  

多个联合将被添加到查询中,并且向所有联合添加不同的过滤器很难索引,我相信是这样。 我应该如何进行以获得更好的性能?我应该以不同的方式检索数据吗?


编辑: 车辆 table 具有如下列

ID ColorID FueltypeID Mileage ...
1    1        1         1000
2    1        2         500
3    2        2         2000
4    2        1         1500
5    3        1         9000
6    3        2         8000

使用上面的查询,我想提取具有一组有限值的过滤器的所有不同值,例如颜色和燃料类型。 预期结果将是

     reference value
1     Color      1
2     Color      2
3     Color      3
4     Fueltype   1
5     Fueltype   2

很难说出你想要什么,但看起来是:

with v as (  
      select something
      from vehicles  
      where [users stock filters]) 
     )
select f.which, f.id
from v cross apply
     (values ('XFilter', v.x_id, (case when Y_id > [value] and Z_id > [value] then 1 else 0 end) ),
             ('YFilter', v.y_id, (case when X_id > [value] and Z_id > [value] then 1 else 0 end) ),
             ('ZFilter', v.z_id, (case when X_id > [value] and Y_id > [value] then 1 else 0 end) )
     ) f(which, id, outcome)
where f.outcome = 1;