我有一个三列的表格。两列是 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;
我应该在这里做什么来提高性能,欢迎任何建议来改进这一点。
您需要一个复合索引来覆盖
WHERE
子句:
WHERE ACCOUNT_ID = 112323 AND ENTITY = '21f442-678f97-fgh382-47d828';
例如:
CREATE INDEX idx3 ON UNIQUE_ENTITIES (ACCOUNT_ID, ENTITY);