在什么情况下,SQL将使用表的索引

在什么情况下,SQL将使用表的索引,sql,sql-server,Sql,Sql Server,在一次采访中,我被问到一个奇怪的问题。我找不到正确答案,因此将问题张贴在下面: 我有一个列名称的索引。我正在使用通配符搜索名称。我的问题是 a) 从螺柱详细信息中选择*螺柱名称,如“a%” b) 从螺柱详细信息中选择*螺柱名称,如“%A” c) 从螺柱名称与“A%”不同的螺柱详细信息中选择* 在哪种情况下,SQL server会使用我在Stud_Name上创建的索引 附言:如果这个问题看起来很愚蠢,不要生我的气,要生问我这个问题的面试官的气。 此外,我没有任何关于如何创建索引的信息。以上信息就是

在一次采访中,我被问到一个奇怪的问题。我找不到正确答案,因此将问题张贴在下面:

我有一个列名称的索引。我正在使用通配符搜索名称。我的问题是

a) 从螺柱详细信息中选择*螺柱名称,如“a%”

b) 从螺柱详细信息中选择*螺柱名称,如“%A”

c) 从螺柱名称与“A%”不同的螺柱详细信息中选择*

在哪种情况下,SQL server会使用我在Stud_Name上创建的索引

附言:如果这个问题看起来很愚蠢,不要生我的气,要生问我这个问题的面试官的气。 此外,我没有任何关于如何创建索引的信息。以上信息就是我所有的。

在什么情况下,SQL Server可以在Stud\u Name上使用索引?

  • 选项(a)是唯一可以在索引搜索中使用的选项<像“A%”这样的代码>可以转换为对
    =A
    的范围搜索。在什么情况下,SQL Server可以对Stud\u Name使用索引?


    • 选项(a)是唯一可以在索引搜索中使用的选项<像“A%”这样的代码>可以在
      =A
      上转换为范围搜索,并且
      不能使用带前导通配符的索引。我认为
      不喜欢
      可以使用索引。对于所有情况,都可以使用索引,但不能使用带前导通配符的索引。我认为
      不像
      可以使用索引used@lptr-是的。当它归结为
      的预期查找次数时,选择*
      。在最好的情况下,它扫描狭窄的索引,没有找到匹配的行,并且不需要在allIt上进行任何查找。它也没有执行选项C—选项C可能不会使索引在统计上具有相关性。您必须删除表中的一个重要部分才能使其有意义。@TomTom-SQL Server对
      中的Stud\u Name“a”
      做了相同的处理,即使只删除了一个值。不是所有的价值观。如果索引正在覆盖,它会将
      转换为
      >a'
      ,并使用这两个seek谓词进行seek,但它是统计数据驱动的。这就是我说的。如果你有一百万行,你可能真的没有消除很多-因此你可能会最终与成本基础优化器说“该死,不值得”.(编辑评论)…选项b可以使用索引扫描。如果所有的名字都不是以字母结尾,那么扫描整个表不是更昂贵吗?@lptr-yes。当它归结为
      的预期查找次数时,选择*
      。在最好的情况下,它扫描狭窄的索引,没有找到匹配的行,并且不需要在allIt上进行任何查找。它也没有执行选项C—选项C可能不会使索引在统计上具有相关性。您必须删除表中的一个重要部分才能使其有意义。@TomTom-SQL Server对
      中的Stud\u Name“a”
      做了相同的处理,即使只删除了一个值。不是所有的价值观。如果索引正在覆盖,它会将
      转换为
      >a'
      ,并使用这两个seek谓词进行seek,但它是统计数据驱动的。这就是我说的。如果你有一百万行,你可能真的没有消除很多-因此你可能会最终与成本基础优化器说“该死,不值得”.(编辑评论)…选项b可以使用索引扫描。当所有的名字都不是以一个字母结尾时,扫描整个表不是更昂贵吗?