使用GROUP BY优化以相同字段开头的几个查询

用户名

数据库是MySQL。例如:我有一个表和几个GROUP BY的SELECT查询:

SELECT
    MIN(price)
FROM `table`
GROUP BY
    field1, field2, field3, field4;

SELECT
    MIN(price)
FROM `table`
GROUP BY
    field1, field2, field3, field5;

SELECT
    MIN(price)
FROM `table`
GROUP BY
    field1, field2, field3, field6;

所有查询均按field1,field2,field3进行分组。有什么方法可以优化或缓存相同的操作?

丹古格勒

您尝试做的事情听起来很简单,但实际上仅从“代码保留”的角度讲才有意义(意味着更少的代码,而不是更少的数据库工作)。实际上,“ GROUP BY field1,field2,field3”实际上是“ GROUP BY field1,field2,field3,field4”返回的内容的子集。让我用一个数据集来说明:

price | field1 | field2 | field3 | field4
------|--------|--------|--------|-------
1.00  |    1   |   1    |   1    |   1   
1.50  |    1   |   1    |   1    |   2   
2.00  |    1   |   1    |   2    |   3   
3.00  |    1   |   1    |   2    |   3   

“按字段1,字段2,字段3分组”返回:

min_price | field1 | field2 | field3 
----------|--------|--------|--------
   1.00   |    1   |   1    |   1    
   2.00   |    1   |   1    |   2    

“按字段1,字段2,字段3,字段4分组”返回更多行:

min_price | field1 | field2 | field3 | field4
----------|--------|--------|--------|-------
   1.00   |    1   |   1    |   1    |   1   
   1.50   |    1   |   1    |   1    |   2   
   2.00   |    1   |   1    |   2    |   3   

如您所见,您无法以某种方式重用第一个group by语句来获取第二个结果集。

如果性能是您的问题,@ deadzone建议的实例化视图是一个很好的建议。如果将所有行配对(GROUP BY field1,field2,field3,field4,field5,field6),则可以所有字段的组上创建实例化视图。除此之外,您只需要确保优化每个查询即可。

如果您关心代码保存,MySQL不会给您很多选择,因为它不支持动态SQL。SQL是一种最好的选择,它经常会编写更多代码(插入内部程序员的叹息)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySql GROUP BY 使用文件排序 - 查询优化

来自分类Dev

使用几乎相同的子查询优化MySQL查询

来自分类Dev

使用GROUP BY和COUNT优化/重写LINQ查询

来自分类Dev

优化 MySQL GROUP BY 查询

来自分类Dev

在MongoDB聚合查询中使用以$开头的字段

来自分类Dev

使用group by的oracle sql查询

来自分类Dev

使用 GROUP BY ALL 重写查询

来自分类Dev

Mysql查询所需的帮助,以使用Group By匹配列值开头的前10个字符,并以相同的名称进行分组

来自分类Dev

使用CASE和GROUP BY的SQL Server查询,字段无效?

来自分类Dev

使用CASE和GROUP BY的SQL Server查询,字段无效?

来自分类Dev

如何使用SQL查询删除相同的表字段

来自分类Dev

使用GROUP BY连接单列字段

来自分类Dev

无法使用GROUP BY子句获取字段

来自分类Dev

无法使用GROUP BY子句获取字段

来自分类Dev

sql查询使用group by怎么办

来自分类Dev

在SQL中的子查询中使用group by

来自分类Dev

SUM和GROUP BY使用子查询

来自分类Dev

如何使用MySQL子查询和GROUP BY

来自分类Dev

使用group-by的Mongodb聚合查询

来自分类Dev

使用linq group by语句作为子查询

来自分类Dev

使用GROUP BY的子查询中的MySQL COUNT

来自分类Dev

sql查询使用group by怎么办

来自分类Dev

使用GROUP BY和IN的SQL查询太慢

来自分类Dev

使用Group By和Let的LINQ查询

来自分类Dev

在JPA查询中使用GROUP BY / HAVING子句

来自分类Dev

SUM和GROUP BY使用子查询

来自分类Dev

在SQL中的子查询中使用group by

来自分类Dev

使用 group by 查询查找部门计数

来自分类Dev

使用 Group By 和 Being 的 SQL 查询