如何使用右连接减少查询的执行时间?
How to reduce execution time on query with right join?
如果我没有太多数据,我的右连接查询工作正常。但是当我的 table 中有 500 行或更多行时,查询可能需要 5 分钟甚至更长时间。
如何减少或改进此查询的执行时间:
SELECT dlocation.USER_NAME,dtransaction.USER_NAME
FROM dlocation RIGHT JOIN dtransaction
ON (dtransaction.locationid= dlocation.id) and (dtransaction.isinternational =
dlocation.isinternational) and (dtransaction.USER_NAME= dlocation.USER_NAME)
WHERE dtransaction.typeId = 'Charge' and (dtransaction.USER_NAME is null or
dlocation.USER_NAME is null)
您需要请求 H2 来显示此类查询的执行计划。
为此,您需要 EXPLAIN 命令 [http://h2database.com/html/commands.html#explain]。您只需将其添加到性能调查中的查询前面即可。
因为这是一个连接,您需要确保您的执行计划中没有剩余的表扫描。在您的情况下,您可能需要添加索引。
可以通过添加以下索引来提高查询的性能:
create index ix1 on dtransaction (typeId, USER_NAME);
create index ix2 on dlocation (id, isinternational, USER_NAME);
如果我没有太多数据,我的右连接查询工作正常。但是当我的 table 中有 500 行或更多行时,查询可能需要 5 分钟甚至更长时间。
如何减少或改进此查询的执行时间:
SELECT dlocation.USER_NAME,dtransaction.USER_NAME
FROM dlocation RIGHT JOIN dtransaction
ON (dtransaction.locationid= dlocation.id) and (dtransaction.isinternational =
dlocation.isinternational) and (dtransaction.USER_NAME= dlocation.USER_NAME)
WHERE dtransaction.typeId = 'Charge' and (dtransaction.USER_NAME is null or
dlocation.USER_NAME is null)
您需要请求 H2 来显示此类查询的执行计划。
为此,您需要 EXPLAIN 命令 [http://h2database.com/html/commands.html#explain]。您只需将其添加到性能调查中的查询前面即可。
因为这是一个连接,您需要确保您的执行计划中没有剩余的表扫描。在您的情况下,您可能需要添加索引。
可以通过添加以下索引来提高查询的性能:
create index ix1 on dtransaction (typeId, USER_NAME);
create index ix2 on dlocation (id, isinternational, USER_NAME);