创建非聚集索引

创建非聚集索引

SQL Server 2014

其他版本

2(共 2)对本文的评价是有帮助 - 评价此主题

您可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中创建非聚集索引。 非聚集索引是一种与存储在表中的数据相分离的索引结构,可对一个或多个选定列重新排序。 非聚集索引通常可帮助您通过比搜索基础表更快的速度查找数据;有时可以完全由非聚集索引中的数据回答查询,或非聚集索引可将数据库引擎指向基础表中的行。 一般来说,创建非聚集索引是为了提高聚集索引不涵盖的频繁使用的查询的性能,或在没有聚集索引的表(称为堆)中查找行。 可以对表或索引视图创建多个非聚集索引。

本主题内容

开始之前

典型实现

可以通过下列方法实现非聚集索引:

  • UNIQUE 约束

    在创建 UNIQUE 约束时,默认情况下将创建唯一非聚集索引,以便强制 UNIQUE 约束。 如果不存在该表的聚集索引,则可以指定唯一聚集索引。 有关详细信息,请参阅唯一约束和 CHECK 约束

  • 独立于约束的索引

    默认情况下,如果未指定聚集,将创建非聚集索引。 对于每个表可创建的最大非聚集索引数为 999。 这包括使用 PRIMARY KEY 或 UNIQUE 约束创建的任何索引,但不包括 XML 索引。

  • 索引视图的非聚集索引

    对视图创建唯一的聚集索引后,便可以创建非聚集索引。 有关详细信息,请参阅创建索引视图

安全性

权限

要求对表或视图具有 ALTER 权限。 用户必须是 sysadmin 固定服务器角色的成员,或者是 db_ddladmin 和 db_owner 固定数据库角色的成员。

 [返回页首]

使用 SQL Server Management Studio

使用表设计器创建非聚集索引

  1. 在“对象资源管理器”中,展开其中包含您要创建非聚集索引的表的数据库。
  2. 展开“表”文件夹。
  3. 右键单击您要创建非聚集索引的表,然后选择“设计”。
  4. 在“表设计器”菜单上,单击“索引/键”。
  5. 在“索引/键”对话框中,单击“添加”。
  6. 从“选定的主/唯一键或索引”文本框中选择新索引。
  7. 在网格中,选择“创建为聚集的”,然后从该属性右侧的下拉列表中选择“否”。
  8. 单击“关闭”。
  9. 在“文件”菜单上,单击“保存 table_name”。

使用对象资源管理器创建非聚集索引

  1. 在“对象资源管理器”中,展开其中包含您要创建非聚集索引的表的数据库。
  2. 展开“表”文件夹。
  3. 展开要为其创建非聚集索引的表。
  4. 右键单击“索引”文件夹,指向“新建索引”,然后选择“非聚集索引…”。
  5. 在“新建索引”对话框的“常规”页中,在“索引名称”框中输入新索引的名称。
  6. 在“索引键列”下,单击“添加…”。
  7. 在“从 table_name 中选择列”对话框中,选中要添加到非聚集索引的一个或多个表列的复选框。
  8. 单击“确定”。
  9. 在“新建索引”对话框中,单击“确定”。

 [返回页首]

使用 Transact-SQL

对表创建非聚集索引

  1. 在“对象资源管理器”中,连接到数据库引擎的实例。
  2. 在标准菜单栏上,单击“新建查询”。
  3. 将以下示例复制并粘贴到查询窗口中,然后单击“执行”。
    USE AdventureWorks2012;
    GO
    -- Find an existing index named IX_ProductVendor_VendorID and delete it if found.
    IF EXISTS (SELECT name FROM sys.indexes
                WHERE name = N‘IX_ProductVendor_VendorID‘)
        DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;
    GO
    -- Create a nonclustered index called IX_ProductVendor_VendorID
    -- on the Purchasing.ProductVendor table using the BusinessEntityID column.
    CREATE NONCLUSTERED INDEX IX_ProductVendor_VendorID
        ON Purchasing.ProductVendor (BusinessEntityID);
    GO
    

有关详细信息,请参阅 CREATE INDEX (Transact-SQL)

时间: 2024-10-02 03:50:57

创建非聚集索引的相关文章

SqlServer中创建非聚集索引和非聚集索引

聚集索引与非聚集索引,其实已经有很多的文章做过详细介绍. 非聚集索引 简单来说,聚集索引是适合字段变动不大(尽可能不出现Update的字段).出现字段重复率小的列,因为聚集索引是对数据物理位置相同的索引,所以一张表中只能出现一个聚集索引. 聚集索引的特征:代表全部数据存储的位置索引,不能经常去更新这个字段,最好不出现重复. 聚集索引 非聚集索引也有很多人叫法上细分为唯一索引.全文索引.普通索引,我们在进项条件查询时,作为条件过滤的字段通常被设置为非聚集索引,这样就不需要去读取原始记录,直接查询索

SQL Server中的联合主键、聚集索引、非聚集索引

我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升,但我们依然可以通过对联合主键中的首列除外的其他列建立非聚集索引来提高性能.本文将对联合主键.聚集索引.非聚集索引对查询性能的影响举例说明.步骤一,建立一个测试表,并且插入350万条以上的数据. /*创建测试数据表*/create table MyTestTable(id varchar(10)not n

36. SQL -- 聚集索引和非聚集索引(2)

关于聚集索引与非聚集索引的讨论: A.区别: 聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个 聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续. B.关于索引的几个问题: DEMO 分析: 一个学生表student,里面是学生号id,学生姓名,学生所在城市ID,学生成绩(总分). · 问:如果想按姓名查询,如何做优化? · 答:在姓名字段上建立索引. · 问:建立什么类型的索引? · 答:建立非聚集索引. · 问:为什么? · 答:一般有范围查询的需求,可

SQL Server 非聚集索引的覆盖,连接,交叉和过滤 <第二篇>

在SQL Server中,非聚集索引其实可以看做是一个含有聚集索引的表,但相对实际的表来说,非聚集索引中所存储的表的列数要少得多,一般就是索引列,聚集键(或RID).非聚集索引仅仅包含源表中的非聚集索引的列和指向实际物理表的指针. 一.非聚集索引之INCLUDE 非聚集索引其实可以看做一个含有聚集索引的列表,当这个非聚集索引中包含了查询所需要的所有信息的时候,则就不再需要去查基本表,仅仅做非聚集索引就能够得到所需要的数据.INCLUDE实际上也能称为覆盖索引,但它不影响索引键的大小. 先来看下面

索引 - 非聚集索引设计指南-转载

非聚集索引包含索引键值和指向表数据存储位置的行定位器. 有关非聚集索引体系结构的详细信息, 请参阅 非聚集索引结构. 可以对表或索引视图创建多个非聚集索引. 通常, 设计非聚集索引是为改善经常使用的没有建立聚集索引的查询的性能. 与使用书中索引的方式相似, 查询优化器在搜索数据值时, 先搜索非聚集索引以找到数据值在表中的位置, 然后直接从该位置检索数据. 这使非聚集索引成为完全匹配查询的最佳选择, 因为索引包含说明查询所搜索的数据值在表中的精确位置的项. 例如, 为了从 Person.Perso

索引深入浅出:非聚集索引的B树结构在堆表

在“索引深入浅出:非聚集索引的B树结构在聚集表”里,我们讨论了在聚集表上的非聚集索引,这篇文章我们讨论下在堆表上的非聚集索引. 非聚集索引可以在聚集表或堆表上创建.当我们在聚集表上创建非聚集索引时,聚集索引键担当为行指针.在堆表里,文件号,页号和槽号(file id , page number and slot number)的组合在非聚集索引里担当为行指针. 我们来看下手头的一个例子.我们创建salesorderdetail表的副本,并在上面的productid和salesorderid 列创

聚集索引和非聚集索引的区别有哪些

SQL SERVER提供了两种索引:聚集索引和非聚集索引.其中聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较大.非聚集索引表示数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置,非聚集索引检索效率比聚集索引低,但对数据更新影响较小. 方法/步骤 1  聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序.      聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规定数据在表中的物理存储顺

SQLSERVER聚集索引与非聚集索引的再次研究(下)

原文:SQLSERVER聚集索引与非聚集索引的再次研究(下) SQLSERVER聚集索引与非聚集索引的再次研究(下) 上篇主要说了聚集索引和简单介绍了一下非聚集索引,相信大家一定对聚集索引和非聚集索引开始有一点了解了. 这篇文章只是作为参考,里面的观点不一定正确 上篇的地址:SQLSERVER聚集索引与非聚集索引的再次研究(上) 下篇主要说非聚集索引 先上非聚集索引的结构图 先创建Department8表 1 --非聚集索引 2 USE [pratice] 3 GO 4 5 CREATE TAB

你能说出SQL聚集索引和非聚集索引的区别吗?

最近突然想起前一阵和一朋友的聊天,当时他问我的问题是一个非常普通的问题:说说SQL聚集索引和非聚集索引的区别. AD:WOT2015 互联网运维与开发者大会 热销抢票 其实对于非专业的数据库操作人员来讲,例如软件开发人员,在很大程度上都搞不清楚数据库索引的一些基本知识,有些是知其一不知其二,或者是知其然不知其所以然.造成这种情况的主要原因我觉的是行业原因,有很多公司都有自己的DBA团队,他们会帮助你优化SQL,开发人员即使不懂优化问题也不大,所以开发人员对这方面也就不会下太多功夫去了解SQL优化