我有一个存储过程,其中包括 4-5 个表连接操作,SP 我在两个不同的数据库上执行(所有表定义都相同),然后在 DB-1 中,SP 需要 20-25 秒,在 DB-2 SP 中需要 1 秒在我重建 DB-1 索引之后执行,然后 DB-1 的 SP 与以前相比可以快速工作。
那么连接和表索引之间有什么关系吗?如果是,那么如何解决此类问题?
我有一个存储过程,其中包括 4-5 个表连接操作,SP 我在两个不同的数据库上执行(所有表定义都相同),然后在 DB-1 中,SP 需要 20-25 秒,在 DB-2 SP 中需要 1 秒在我重建 DB-1 索引之后执行,然后 DB-1 的 SP 与以前相比可以快速工作。
那么连接和表索引之间有什么关系吗?如果是,那么如何解决此类问题?
我理解您询问使用索引是否会影响连接性能的问题。答案是响亮的“是”。
通常,连接到只需要几行的表将使用索引(如果存在)。
连接到需要大部分表的表将导致“全表扫描”(Oracle 术语),其中 DBMS 将使用此作为索引构造连接键的哈希,以随后探测正确的值以加入时使用。
请参阅http://en.wikipedia.org/wiki/Join_%28SQL%29#Implementation以及它引用的关于连接算法的文章,以获得对这些的良好概述。