首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接耗时太长

连接耗时太长
EN

Stack Overflow用户
提问于 2011-02-25 01:17:21
回答 1查看 2.9K关注 0票数 1

我有一个在Oracle中运行大约需要5分钟的查询:

代码语言:javascript
复制
select t1.A,t2.B,t2.C,t2.D,t2.E 
from TABLE1 t1 join TABLE2 t2 
on t2.X = t1.Y 
where t1.F = <integer> 
and t2.G = <integer> 
and t1.H = <integer> 

t1有170万行,t2有3,100万行。我在t2.X和t1.F上有索引。我试着在t1.Y,t2.G和t1.H上添加索引,但他们没有帮助。你有什么想法可以提高这个连接的性能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-25 01:23:25

查看所有涉及的字段,每个表上的覆盖索引将涉及到may列

代码语言:javascript
复制
t1: Y, F, H, A
t2: X, G, C, D, E

t2.X、t2.G或t1.Y、t1.F、t1.H标准的选择性如何?

如果没有一个单独的列具有足够的选择性(理想情况下为0.5%或更低),则可能需要创建一个或多个涉及多个列的覆盖索引,例如

代码语言:javascript
复制
t2 (G, X)
t1 (H, F, Y)

注意:索引中列的顺序非常重要-始终将最具选择性的列(将列数据划分为最不同的集合)放在第一位。

以存储为代价,您可以通过在索引本身中提供所有必需的列来使索引覆盖查询。这意味着查询根本不需要返回表数据。

代码语言:javascript
复制
create index ix_t2 on t2 (G,X) INCLUDE (C,D,E)
create index ix_t1 on t1 (H,F,Y) INCLUDE (A)

编辑

看起来我把SQL Server DDL放进去了。在Oracle中,您必须将索引扩展为t2 (G、X、C、D、E) --但这增加了索引使用的选择性要求,因为索引键变得非常长。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5108064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档