Sqlite 使用字符串条件响应较慢

问题描述 投票:0回答:1

我有一个三列的表格。两列是 BIGINT 数据类型列,一列是 varchar(512) 数据类型。 使用java语言。

CREATE TABLE IF NOT EXISTS `UNIQUE_ENTITIES` (DETAILS_ID BIGINT, ACCOUNT_ID BIGINT, ENTITY varchar(512));

#After inserting the data creating indexes

create INDEX `idx1` on `UNIQUE_ENTITIES` (ACCOUNT_ID);
create INDEX `idx2` on `UNIQUE_ENTITIES` (ENTITY);

在 ACCOUNT_ID、ENTITY 两列上有索引。 这是我的选择查询::

select DETAILS_ID from `UNIQUE_ENTITIES` where ACCOUNT_ID=112323 and ENTITY='21f442-678f97-fgh382-47d828';

此查询在 312GB NVme 磁盘和 32 GB RAM 机器中需要近 150 毫秒。

如果我仅在条件中使用 ACCOUNT_ID 运行查询,它将在 2 毫秒内返回结果。

select DETAILS_ID from `UNIQUE_ENTITIES` where ACCOUNT_ID=112323;

我应该在这里做什么来提高性能,欢迎任何建议来改进这一点。

java database sqlite
1个回答
0
投票

您需要一个复合索引来覆盖

WHERE
子句:

WHERE ACCOUNT_ID = 112323 AND ENTITY = '21f442-678f97-fgh382-47d828';

例如:

CREATE INDEX idx3 ON UNIQUE_ENTITIES (ACCOUNT_ID, ENTITY);
© www.soinside.com 2019 - 2024. All rights reserved.