如何提高 H2 Select 查询性能?
Posted
技术标签:
【中文标题】如何提高 H2 Select 查询性能?【英文标题】:How can i increase H2 Select Query Performance? 【发布时间】:2012-11-23 08:58:20 【问题描述】:我有一个用 Play Framework 1.2.5 编写的应用程序,我使用 H2 文件作为数据库。
该应用程序有一个“销售”表,每天大约有 1000 行。我有大约 5 年的数据(通常会有 2-3 年的数据可用)所以基本上我的测试机中有一个包含 150 万 + 数据的表格。
我的问题是,客户要求提供诸如“给我日期之间的总和 os 销售额以及集团业务产品类型和销售类型”之类的数据。所以我必须做一些类似于2组和日期范围的选择查询。
随着表变大,选择查询性能急剧下降。我该怎么做才能获得更好的结果?
我创建了另一个表格,其中包含每小时、每天和每月的汇总销售额,但是我必须从销售额表中搜索一些功能。
第一个应用程序是用 c# (asp.net webservice) 和 ms-sql 服务器编写的,以存储过程作为数据库,这些操作最快只需几秒钟。而且我有相同的数据,即使我没有使用任何汇总表来更快地进行查询。
我知道,专用服务器应用程序总是比嵌入式服务器快,但我认为必须有一种方法来提高此查询的性能。
我可以对 H2 引擎进行任何优化吗?
由于并发问题,我不得不在 H2 服务器上启用“MVCC”,这可能是性能问题吗?
感谢您阅读并花费您的时间。
**为使用 Play Framework 1.2.x 的人编辑:
我刚刚在要添加到索引的每一列上添加了@Index(name="sales_columnname_index") 注释,现在 H2 引擎的工作速度甚至比我的旧 mssql+asp.net 应用程序还要快。
【问题讨论】:
【参考方案1】:您必须通过创建正确的索引来进行优化。
例如这个
客户要求提供诸如“给我日期之间的总和 os 销售额以及团购产品类型和销售类型”之类的数据。所以我必须做一些类似于 2 个组和日期范围的选择查询
您需要一个索引(不一定是唯一的)列在产品类型、销售类型和时间上,如下所示:
create index sales_table_i2 on sales_table(product_type, sales_type, sales_time);
在您的 HQL 查询中,您必须提及索引列,以确保数据库使用该索引,例如
select sum(amount) from SalesTable where salesTime >= :start and salesTime < :end group by productType, salesType
或
from SalesTable where productType = :prod and salesType = :sale and salesTime >= :start and salesTime < :end
在第二个示例中,您必须总结 Java 代码中的挂载。
【讨论】:
非常感谢,我会尽快检查并告诉结果 向表中添加索引给了我难以置信的结果!感谢您的回答!以上是关于如何提高 H2 Select 查询性能?的主要内容,如果未能解决你的问题,请参考以下文章