Ale*_*win 6 sql-server nonclustered-index
我不确定是否正确使用非聚集索引。SSMS 计划估计器说当以下索引已经在表中时添加另一个索引。
CREATE NONCLUSTERED INDEX [ix_zone_fetch_shipping] ON [dbo].[tbl_shipping_rates_zones]
(
[iso] ASC, [mzone] ASC, [postal] ASC
)
INCLUDE
(
[region], [zone_dom], [zone_emi], [zone_pmi], [zone_fci],
[zone_ups], [zone_fed]
)
Run Code Online (Sandbox Code Playgroud)
我的查询是
SELECT * FROM tbl_shipping_rates_zones WHERE postal = '10001'
Run Code Online (Sandbox Code Playgroud)
我的问题是……我应该为所有可能的查找键创建索引吗?我在不同的查询中按 mzone、iso 和 postal 进行搜索。
谢谢
SQL Server 将向您显示它想要使用的索引,因为它估计索引会使生活更轻松。当然没有必要在每个可搜索字段上创建索引,实际上这样做会使写入性能大大降低。如果给定表上的索引少于 5 到 10 个,并且一直运行该查询,则您可能希望完全按照 SSMS 显示的方式添加建议的索引。
JNK 的编辑如下
一起查看建议的索引也很重要。可以这么说,所有建议都在孤岛中,因此可以通过INCULDE在另一个索引上添加d 字段来替换整个建议索引。
例如,可以对这两个索引提出建议:
CREATE INDEX ix_IndexA ON Table (ColA, ColB)
CREATE INDEX ix_IndexB ON Table (ColA) INCLUDE (ColC)
Run Code Online (Sandbox Code Playgroud)
实际上,您可以通过以下方式满足两者的需求:
CREATE INDEX ix_IndexC ON Table (ColA, ColB) INCLUDE (ColC)
Run Code Online (Sandbox Code Playgroud)
我已经在更复杂的索引(10-20 个关键字段,10-20 个包含字段)中看到了这一点,其中向INCLUDE列表中添加一个字段将消除对第二个索引的需要。
| 归档时间: |
|
| 查看次数: |
9960 次 |
| 最近记录: |