我有一个 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
)
当我执行简单查询时 SELECT * FROM DB
.TEST
ORDER BY id
ASC LIMIT 50 - 它是完美执行大约 3-4 毫秒。但当通过 to desc 更改订单时,情况发生变化,查询大约需要 8-10 秒。
无论如何,是否有更快下单的解决方案?
谢谢
最佳答案
通过对非索引列进行排序,您将强制数据库扫描每一行以比较值。最好的办法是在要排序的行上创建索引。 http://www.h2database.com/html/performance.html#storage_and_indexes .
h2db 在处理大量数据时也设计得很慢。
语法是在 CREATE TABLE DDL 之后添加:
CREATE INDEX IDX_TO ON DB.TEST(TO);
添加索引时请记住,数据库在插入、更新和删除方面有更多工作要做。因此,请将它们保持在最低限度。
注意:按 id 排序的原始查询是对数据库的主键进行排序,这是一个索引列,这就是它更快的原因。
关于java - h2database 的排序速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132667/