【问题标题】:How can i increase H2 Select Query Performance?如何提高 H2 Select 查询性能?
【发布时间】: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 应用程序还要快。

【问题讨论】:

    标签: hibernate playframework h2


    【解决方案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 代码中的挂载。

    【讨论】:

    • 非常感谢,我会尽快检查并告诉结果
    • 向表中添加索引给了我难以置信的结果!感谢您的回答!
    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 2020-02-08
    • 2020-10-18
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    相关资源
    最近更新 更多