Java H2数据库的订购速度非常慢
我有一个java小程序,它占用了h2数据库,表中有200.000行 表: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
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
orderbyid
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如果你在非索引列上查询大量数据,所有关系数据库都会变慢。