了解查询的执行计划

时间:2009-03-13 11:59:36

标签: firebird firebird1.5

我有这个SQL:

SELECT
  *
FROM
  Requisicao r
  join convenio c on c.idconvenio = r.idconvenio
  join empresa e on e.idempresa = c.idempresa

当我执行它时,我得到了这个执行计划:

PLAN JOIN (C NATURAL,E INDEX (INTEG_160),R INDEX (INTEG_318))

什么意味着没有使用Convenio的索引(每个表都有索引)

我想更好地理解它,以便我可以改善我在这个系统中遇到的一些性能问题。

感谢。

2 个答案:

答案 0 :(得分:4)

你觉得怎么了?因为你没有任何条件(WHERE子句)服务器会自然地读取一个表,即从第一行到最后一行。考虑到索引的选择性,决定从c读取并加入来自e和r的记录会更好。

答案 1 :(得分:0)

我同意安德烈的观点。如果convenio.idconvenio的选择性很低,那么计划就可以了。