我有下面的表查询执行以获取最新的REG_LOG(表)更新,执行全表扫描以获得结果。
SELECT REG_PATH,
REG_USER_ID,
REG_LOGGED_TIME,
REG_ACTION,
REG_ACTION_DATA
FROM REG_LOG
WHERE REG_LOGGED_TIME > <last-access-time>
AND REG_LOGGED_TIME < '<current-time>'
AND REG_TENANT_ID = <tenant-id>
此表可包含数百万个数据。 我的问题是我们可以做些什么来提高这个查询的性能?根据解决方法,我们为REG_LOGGED_TIME列创建了一个索引,以减少全表扫描。
答案 0 :(得分:1)
在WHERE子句中有2个字段。首先有候选索引。 您应该分析字段的选择性。它是计数不同的值除以行数。如果结果编号大于200,则必须创建索引。
示例:
CREATE INDEX ON REG_LOG (REG_TENANT_ID, REG_LOGGED_TIME);
此外,您应该针对此表查看您的其他查询。可能你应该只创建一个复合索引。在这种情况下,第一个字段必须是具有最大选择性的列。
答案 1 :(得分:1)
添加以下索引将显着提高查询速度:
CREATE INDEX ON REG_LOG (REG_TENANT_ID, REG_LOGGED_TIME);