【发布时间】:2014-10-03 16:07:00
【问题描述】:
我的应用程序有一个仪表板屏幕,其中包含许多图表,显示用户活动、销售业绩等的指标和结果。
这些结果可以按日期、用户和许多其他选项进行过滤。假设我对每个图表都有一个查询,在这些多个查询中应用相同过滤规则的最佳方式是什么?复制相同“where”子句(相同过滤规则)的最佳方式是什么? ) 跨越多个查询?
例如,
SELECT * FROM users WHERE date = '2014-10-03';
SELECT * FROM products WHERE date = '2014-10-03';
两个查询具有相同的规则。 有人建议使用此规则设置一个变量并将其连接到其他查询。比如:
$where = "WHERE 日期 = '2014-10-03'";
$query = "SELECT * FROM users". $哪里;
...
$query = "选择 * FROM 产品"。 $哪里;
...
但我不认为这是一个好的做法。
【问题讨论】:
-
将每个查询视为 distinct 操作 - 不要尝试跨不同查询“优化”此操作。但是,请酌情重用/缓存查询的结果(例如,无需运行 same 查询 N 次以显示在不同的容器中)。采用适当的关系设计、适当的索引、更新的统计信息,并相信 RDBMS 能够为每个 distinct 查询正确实施良好的计划 - 如果有疑问,请分析性能。
-
你能说得更具体点吗?什么过滤规则?
-
为每个查询添加相同的
where子句。 -
@user2864740 谢谢,但我的问题是在许多查询中复制相同的“where”子句(相同的过滤规则)的最佳方法是什么。
-
@FelipeFrancisco 我的评论回复是使用三个不同的查询。如何生成它们以减少代码重复(例如)是次要问题。我建议按照一组规则并使用适当的 SQL 占位符从头开始构建每个查询(开销可以忽略不计)。