数据库是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] 删除。
我来说两句