首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化select的执行

优化select的执行
EN

Stack Overflow用户
提问于 2015-06-15 14:57:08
回答 3查看 51关注 0票数 3

我要优化这个选择:

代码语言:javascript
复制
Select Dane1, Dane5, Dane6, Dane7 FROM Test
INNER JOIN Test2 ON Test.Id=Test2.IdTest
WHERE Dane5 > 199850

我的数据库有两个表测试,test2:

测试设计: Id int ->PRIMARY KEY,Dane1 int,Dane2 int,Dane3 int,Dane4 int,Dane5 int,

test2设计: Id int ->PRIMARY KEY,Dane6 int,Dane7 int,IdTest int

默认索引:PK__test__7C8480AE(集群),PK__test2__7E6CC920(集群)

问题是:附加或删除哪些索引?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-15 15:45:05

在创建索引时,需要考虑的事情很少,例如,在本例中:

  • Dane5 > 199850的行有多少行,总共有多少行?
  • 索引中的列是否有很多更新,->更新速度慢。
  • 是否会对基表进行大量的键查找,以获取查询中所需的其余列?

你可以试试这样的方法:

代码语言:javascript
复制
Create index test_xxx on test (Dane5) include (Dane1)

包含Dane1的天气取决于有多少行,以及键查找是否导致问题

Id已经包含在其中,因为它是聚集索引

代码语言:javascript
复制
Create index test2_yyy on test2 (IdTest) include (Dane6, Dane7)

将Dane6和Date7作为包含的列的天气也取决于需要对表执行的总查找量以获得它们。

您应该打开statistics,看看什么导致最符合逻辑的读取,以及是否需要在索引中包含包含的列。

票数 3
EN

Stack Overflow用户

发布于 2015-06-15 15:08:20

定义对外关系总是一个好主意。通过这种方式,您可以保持数据完整性,并且可以指定如果删除父记录会发生什么(F.E。递归删除)。

外键也是索引快速查找子记录的好选择。

票数 4
EN

Stack Overflow用户

发布于 2015-06-15 15:15:49

正如Tim指出的,外键和外键上定义的索引是一个很好的调用。

如果您的where子句总是在Dane5上,一个额外的索引可以给您带来额外的速度,那就是在Dane5上添加一个非聚集索引。

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

https://stackoverflow.com/questions/30848416

复制
相关文章

相似问题

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