代码之家  ›  专栏  ›  技术社区  ›  priyanka.sarkar

在SQL Server中查找和扫描

  •  4
  • priyanka.sarkar  · 技术社区  · 15 年前

    在谷歌搜索之后,我开始知道索引搜索比扫描好。

    如何编写将产生搜索而不是扫描的查询。我想在谷歌上找到这个,但到目前为止还没有运气。

    任何有解释的简单例子都将不胜感激。

    谢谢

    3 回复  |  直到 15 年前
        1
  •  6
  •   Community CDub    8 年前
    1. 按主键列搜索
    2. 按列搜索,其中包含索引

    索引是一种数据结构,可以提高对数据库表的数据检索操作的速度。大多数DBS在为表定义主键时自动创建索引。SQL Server将主键(复合或其他)的索引创建为“聚集索引”,但它不创建 作为主键-可以是其他列。

    注:

    • 像“%”+条件+“%”将 使用索引;如条件+'%'

    相关阅读:

        2
  •  3
  •   Paul Sasik    15 年前

    扩展Rexem的反馈:

    pkeys的聚集索引思想不是任意的。这只是使pkey集群化的默认设置。而clustered意味着这些值将在一个SQL Server 8K页面上物理上彼此靠近,因此假设您通过pkey获取一个值,那么您可能会对它的邻居感兴趣。我不认为对pkeys这样做是个好主意,因为它们通常是唯一但任意的标识符。最好在更有用的数据上进行集群。每个表btw一个聚集索引。

    简而言之:如果您可以在聚集索引列上过滤查询(这很有意义),那么一切都会更好。

        3
  •  1
  •   Andomar    15 年前

    索引查找是指SQL Server可以使用 binary search 以便快速找到行。索引中的行按特定的顺序排序,查询必须在WHERE子句中指定足够的信息,以便SQL Server可以使用排序后的索引。

    索引扫描是指SQL Server不能使用索引的排序顺序,但仍然可以使用索引本身。如果表行非常大,但索引相对较小,则这是有意义的。SQL Server将只需要从磁盘读取较小的索引。

    作为一个简单的例子,以电话簿表为例:

    id int identity primary key
    lastname varchar(50)
    phonenumber varchar(15)
    

    假设(姓氏)上有索引。那么这个查询将导致 索引查找 :

    select * from phonebook where lastname = 'leno'
    

    此查询将导致 索引扫描 :

    select * from phonebook where lastname like '%no'
    

    与现实生活中的电话簿类似的是,你不能查找名字以“no”结尾的人。你必须浏览整个电话簿。