优化 select 的执行
Optimize the execution of select
我想优化这个select:
Select Dane1, Dane5, Dane6, Dane7 FROM Test
INNER JOIN Test2 ON Test.Id=Test2.IdTest
WHERE Dane5 > 199850
我的数据库有 2 个表 test,test2:
测试设计:
Id int -> 主键,
Dane1 诠释,
Dane2 诠释,
Dane3 诠释,
Dane4 诠释,
Dane5 整数,
test2 设计:
Id int -> 主键,
Dane6 诠释,
Dane7 诠释,
IdTest 整数,
默认索引: PK__test__7C8480AE(集群),PK__test2__7E6CC920(集群)
问题是:
要附加或删除哪些索引?
定义 foreign-key relationships 总是一个好主意。通过这种方式,您可以保持数据完整性,并且可以指定删除父记录时会发生什么(f.e。递归删除子记录)。
外键也是 index 快速查找子记录的好选择。
正如 Tim 指出的那样,外键和在外键上定义的索引是一个很好的调用。
一个额外的索引可以让你获得一些额外的速度 - 假设你的 where
子句总是在 Dane5
上 - 是在 Dane5
上添加一个非聚集索引
创建索引时需要考虑的事项很少,例如在这种情况下:
- Dane5 > 199850 有多少行,总共有多少行?
- 索引中的列是否有大量更新 -> 更新缓慢。
- 是否要对基础 table 进行大量键查找以获得查询中所需的其余列?
您可以尝试这样的操作:
Create index test_xxx on test (Dane5) include (Dane1)
包含 Dane1 的天气取决于有多少行以及键查找是否导致问题
ID 已经包括在内,因为它是聚簇索引
Create index test2_yyy on test2 (IdTest) include (Dane6, Dane7)
将 Dane6 和 Date7 作为包含列的天气在这里还取决于需要对 table 进行的密钥查找总量以获取它们
您应该打开统计 io 以查看导致最多逻辑读取的原因,以及是否需要索引中包含的列。
我想优化这个select:
Select Dane1, Dane5, Dane6, Dane7 FROM Test
INNER JOIN Test2 ON Test.Id=Test2.IdTest
WHERE Dane5 > 199850
我的数据库有 2 个表 test,test2:
测试设计: Id int -> 主键, Dane1 诠释, Dane2 诠释, Dane3 诠释, Dane4 诠释, Dane5 整数,
test2 设计: Id int -> 主键, Dane6 诠释, Dane7 诠释, IdTest 整数,
默认索引: PK__test__7C8480AE(集群),PK__test2__7E6CC920(集群)
问题是: 要附加或删除哪些索引?
定义 foreign-key relationships 总是一个好主意。通过这种方式,您可以保持数据完整性,并且可以指定删除父记录时会发生什么(f.e。递归删除子记录)。
外键也是 index 快速查找子记录的好选择。
正如 Tim 指出的那样,外键和在外键上定义的索引是一个很好的调用。
一个额外的索引可以让你获得一些额外的速度 - 假设你的 where
子句总是在 Dane5
上 - 是在 Dane5
创建索引时需要考虑的事项很少,例如在这种情况下:
- Dane5 > 199850 有多少行,总共有多少行?
- 索引中的列是否有大量更新 -> 更新缓慢。
- 是否要对基础 table 进行大量键查找以获得查询中所需的其余列?
您可以尝试这样的操作:
Create index test_xxx on test (Dane5) include (Dane1)
包含 Dane1 的天气取决于有多少行以及键查找是否导致问题
ID 已经包括在内,因为它是聚簇索引
Create index test2_yyy on test2 (IdTest) include (Dane6, Dane7)
将 Dane6 和 Date7 作为包含列的天气在这里还取决于需要对 table 进行的密钥查找总量以获取它们
您应该打开统计 io 以查看导致最多逻辑读取的原因,以及是否需要索引中包含的列。