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