有哪些方法可以改善以下查询的性能

时间:2016-05-06 07:38:58

标签: mysql sql db2 oracle-sqldeveloper

我有下面的表查询执行以获取最新的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列创建了一个索引,以减少全表扫描。

2 个答案:

答案 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);