Java H2数据库的订购速度非常慢

Java H2数据库的订购速度非常慢,java,sql,performance,h2,Java,Sql,Performance,H2,我有一个java小程序,它占用了h2数据库,表中有200.000行 表: CREATE TABLE `DB`.`TEST` ( `id` INT UNSIGNED PRIMARY KEY, `from` VARCHAR(80) NOT NULL, `from_group` SMALLINT UNSIGNED, `to` VARCHAR(80) NOT NULL, `to_group` SMALLINT U

我有一个java小程序,它占用了h2数据库,表中有200.000行

表:

    CREATE TABLE `DB`.`TEST` (
        `id` INT UNSIGNED PRIMARY KEY,
        `from` VARCHAR(80)  NOT NULL,
        `from_group` SMALLINT UNSIGNED,
        `to` VARCHAR(80)  NOT NULL,
        `to_group` SMALLINT UNSIGNED,
        `type` SMALLINT UNSIGNED NOT NULL,
        `class` SMALLINT UNSIGNED NOT NULL,
        `direction` TINYINT UNSIGNED NOT NULL,
        `start` TIMESTAMP  NOT NULL,
        `answer` TIMESTAMP ,
        `end` TIMESTAMP NOT NULL,
        `duration` INT UNSIGNED,
        `bill` INT UNSIGNED,
        `cost` FLOAT UNSIGNED
    )
当我执行简单查询时,从
DB
TEST
orderby
id
ASC LIMIT 50中选择*时,它的执行时间大约为3-4毫秒。但是,当更改订单BY to desc时,情况会发生变化,查询大约需要8-10秒

无论如何,解决方案是以更快的速度订货吗


感谢对非索引列执行order By操作,您将强制数据库扫描每一行以比较值。最好是在要排序的行上创建索引
h2db在大量数据上的设计速度也很慢。
语法是在创建表DDL之后添加:

CREATE INDEX IDX_TO ON DB.TEST(TO);  
在添加索引时,请记住,数据库在插入、更新和删除方面有更多的工作要做。所以,把它们控制在最低限度


注意:按id排序的原始查询是对数据库的主键进行排序,该主键是一个索引列,这就是它更快的原因

通过对非索引列执行order By,您强制数据库扫描每一行以比较值。最好是在要排序的行上创建索引
h2db在大量数据上的设计速度也很慢。
语法是在创建表DDL之后添加:

CREATE INDEX IDX_TO ON DB.TEST(TO);  
在添加索引时,请记住,数据库在插入、更新和删除方面有更多的工作要做。所以,把它们控制在最低限度


注意:按id排序的原始查询是对数据库的主键进行排序,该主键是一个索引列,这就是它更快的原因

H2要求在这种情况下创建降序索引:

CREATE INDEX IDX_TO_DESC ON DB.TEST(TO DESC);  

也就是说,索引排序。

H2要求您在本例中创建一个降序索引:

CREATE INDEX IDX_TO_DESC ON DB.TEST(TO DESC);  

也就是说,索引可以排序。

谢谢。我知道索引,但我需要向用户显示最新的行。@Vadim Ruban那么您的问题并不反映您想要的查询。你能更新它并发布你想要的查询吗?索引是你提高查询性能的答案。H2如何使大量数据的查询速度变慢?@NateS如果你在非索引列上查询大量数据,所有关系数据库都会变慢。谢谢。我知道索引,但我需要向用户显示最新的行。@Vadim Ruban那么您的问题并不反映您想要的查询。你能更新它并发布你想要的查询吗?索引是你提高查询性能的答案。H2对大量数据的查询速度会变慢吗?@NateS如果你在非索引列上查询大量数据,所有关系数据库都会变慢。