sql-server - 选择的列少于索引中的包含列
问题描述
假设我使用包含列创建了非聚集索引如果我们查询 select col2, col3 from table1 where col1=value1
索引在 col1 上创建,包括 col2、col3、col4。
在这种情况下,是否会使用我的非聚集索引,并将使用叶节点中的包含列?或者它会再次查找col2和col3?因为包含的列比选定的列多?
CREATE INDEX idx1 ON MyTable (Col1) INCLUDE (Col2, Col3,Col4)
我的选择是:
select col2,col3 from mytable where col1=value1
解决方案
是的,您的查询应该使用您之前定义的索引。我说“应该”,因为在可能并非如此的情况下,总是有一些警告,但总的来说,我希望 SQL Server 使用索引。INCLUDE
您在子句中涵盖的列比您的选择要求的多并没有太大变化。这只意味着数据库不会使用这些Col4
信息。但是其他一切,例如遍历 B 树,应该表现得与您只覆盖了您的选择所请求的列完全相同。
回到“应该”的部分。如果您的表非常小,比如只有几十条记录或更少,那么 SQL Server 可能不会选择使用任何索引,而是进行全表扫描。使用索引有一个隐含的预付费用,对于一个非常小的表,它可能不值得这个价格。可能还有其他边缘情况。
推荐阅读
- c - 如何将 volatile 浮点变量分配给任何其他变量?
- java - JAVA - 按多个值对 Json 数组进行排序,同时保留先前的排序顺序
- java - 上传文件 jax rs kumuluz 球衣
- python-3.x - 如何将 bg 颜色作为 tk.Entry 的十六进制
- bash - 我如何查找属性,如果它没有评论,那么我更新它,如果它评论然后取消评论,如果没有找到,然后写它
- r - geom_smooth 不适用于趋势线,点数太少?
- android-studio - 运行firebase查询后如何将电话联系人添加到sqlite数据
- c# - 有没有办法在 C# XML 注释中保留空白?
- c# - 搜索数据库中的现有数据后如何将数据gridview导出到excel?我正在使用 asp.net c#
- javascript - “未定义的选择console.log(数据[])”