精华内容
下载资源
问答
  • sql聚簇索引和非聚簇索引 The SQL CREATE INDEX statement is used to create clustered as well as non-clustered indexes in SQL Server. An index in a database is very similar to an index in a book. A ...

    sql聚簇索引和非聚簇索引

    The SQL CREATE INDEX statement is used to create clustered as well as non-clustered indexes in SQL Server. An index in a database is very similar to an index in a book. A book index may have a list of topics discussed in a book in alphabetical order. Therefore, if you want to search for any specific topic, you simply go to the index, find the page number of the topic, and go to that specific page number. Database indexes are similar and come handy. Particularly, if you have a huge number of records in your database, indexes can speed up the query execution process. There are two major types of indexes in SQL Server: clustered indexes and non-clustered indexes.

    SQL CREATE INDEX语句用于在SQL Server中创建群集索引和非群集索引。 数据库中的索引与书中的索引非常相似。 书索引可以具有按字母顺序在书中讨论的主题的列表。 因此,如果要搜索任何特定主题,只需转到索引,找到该主题的页码,然后转到该特定页码。 数据库索引很相似并且很方便。 特别是,如果数据库中有大量记录,则索引可以加快查询执行过程。 SQL Server中有两种主要的索引类型:聚集索引和非聚集索引。

    In this article, you will see what the clustered and non-clustered indexes are, what are the differences between the two types and how they can be created via SQL CREATE INDEX statement. So let’s begin without any further ado.

    在本文中,您将看到什么是聚集索引和非聚集索引,两种类型之间的区别以及如何通过SQL CREATE INDEX语句创建它们。 因此,让我们开始吧。

    创建虚拟数据 (Creating dummy data)

    The following script creates a dummy database named BookStore with one table i.e. Books. The Books table has four columns: id, name, category, and price:

    以下脚本使用一个表(即Books)创建一个名为BookStore的虚拟数据库。 Books表包含四列: idnamecategoryprice

    CREATE Database BookStore;
    GO
    USE BookStore;
    CREATE TABLE Books
    (
    id INT PRIMARY KEY NOT NULL,
    name VARCHAR(50) NOT NULL,
    category VARCHAR(50) NOT NULL,
    price INT NOT NULL
    )
    

    Let’s now add some dummy records in the Books table:

    现在让我们在Books表中添加一些虚拟记录:

    USE BookStore
     
    INSERT INTO Books
        
    VALUES
    (1, 'Book1', 'Cat1', 1800),
    (2, 'Book2', 'Cat2', 1500),
    (3, 'Book3', 'Cat3', 2000),
    (4, 'Book4', 'Cat4', 1300),
    (5, 'Book5', 'Cat5', 1500),
    (6, 'Book6', 'Cat6', 5000),
    (7, 'Book7', 'Cat7', 8000),
    (8, 'Book8', 'Cat8', 5000),
    (9, 'Book9', 'Cat9', 5400),
    (10, 'Book10', 'Cat10', 3200)
    

    The above script adds 10 dummy records in the Books table.

    上面的脚本在Books表中添加了10条虚拟记录。

    聚集索引 (Clustered indexes)

    Clustered indexes define the way records are physically sorted in a database table. A clustered index is very similar to the table of contents of a book. In the table of contents, you can see how the book has been physically sorted. Either the topics are sorted chapter wise according to their relevance or they can be sorted alphabetically.

    聚集索引定义了在数据库表中对记录进行物理排序的方式。 聚集索引与书的目录非常相似。 在目录中,您可以查看书籍的物理排序方式。 可以根据主题的相关性按章对主题进行排序,也可以按字母顺序对主题进行排序。

    There can be only one way in which records can be physically sorted on a disk. For example, records can either be sorted by their ids or they can be sorted by the alphabetical order of some string column or any other criteria. However, you cannot have records physically sorted by ids as well as names. Hence, there can be only one clustered index for a database table. A database table has one clustered index by default on the primary key column. To see the default index, you can use the sp_helpindex stored procedure as shown below:

    只能对磁盘上的记录进行物理排序的一种方法。 例如,记录可以按其ID排序,也可以按某些字符串列的字母顺序或任何其他条件排序。 但是,您不能具有按ID和名称进行物理排序的记录。 因此,一个数据库表只能有一个聚集索引。 数据库表默认在主键列上具有一个聚集索引。 若要查看默认索引,可以使用sp_helpindex存储过程,如下所示:

    USE BookStore		
    EXECUTE sp_helpindex Books
    

    Here is the output:

    这是输出:

    Output of executing sp_helpindex on the Books table

    You can see the clustered index name and the column on which the clustered index has been created by default.

    您可以看到聚集索引名称和默认情况下在其上创建聚集索引的列。

    To see the records arranged by default clustered index, simply execute the SELECT statement to select all the records from the books table:

    要查看默认聚集索引排列的记录,只需执行SELECT语句以从books表中选择所有记录:

    SELECT * FROM Books
    

    Example Of Records Using A Clustered Index

    You can see that the records have been sorted by default clustered index for the primary key column i.e. id.

    您可以看到,记录已按默认聚集索引针对主键列即ID进行排序。

    To create a clustered index in SQL Server, you can modify SQL CREATE INDEX. Here is the syntax:

    若要在SQL Server中创建聚集索引,可以修改SQL CREATE INDEX。 语法如下:

    CREATE CLUSTERED INDEX <index_name>
    ON <table_name>(<column_name> ASC/DESC)
    

    Let’s now create a custom clustered index that physically sorts the record in the Books table in the ascending order of the price. Since there can be only one clustered index, we first need to remove the default clustered index created via the primary key constraint. To remove the default clustered index, you simply have to remove the primary key constraint from the table that contains the default clustered index. Look at the following script:

    现在,让我们创建一个自定义的聚集索引,该索引将按价格的升序对Books表中的记录进行物理排序。 由于只能有一个聚集索引,因此我们首先需要删除通过主键约束创建的默认聚集索引。 要删除默认的聚集索引,只需从包含默认聚集索引的表中删除主键约束。 看下面的脚本:

    USE BookStore
    ALTER TABLE Books
    DROP CONSTRAINT PK__Books__3213E83F7DFA309B
    GO
    

    Now we can create a new clustered index via SQL CREATE INDEX statement as shown below:

    现在,我们可以通过SQL CREATE INDEX语句创建一个新的聚集索引,如下所示:

    use BookStore
    CREATE CLUSTERED INDEX IX_tblBook_Price
    ON Books(price ASC)
    

    In the script above, we create a clustered index named IX_tblBook_Price. This clustered index physically sorts all the records in the Books table by the ascending order of the price.

    在上面的脚本中,我们创建一个名为IX_tblBook_Price的聚集索引。 该聚集索引以价格的升序对Book表中的所有记录进行物理排序。

    Let’s now select all the records from the Books table to see if they have been sorted in the ascending order of their prices:

    现在,从“书籍”表中选择所有记录,以查看它们是否已经按照价格的升序排序:

    SELECT * FROM Books
    

    Here is the output:

    这是输出:

    Output from using SELECT * FROM to show books are sorted into ascending price

    From the output, you can see that records have actually been sorted by the increasing amount of price.

    从输出中,您可以看到记录实际上已经按照价格的增加进行了排序。

    非聚集索引 (Non-clustered indexes)

    A non-clustered index is an index that doesn’t physically sort the database records. Rather, a non-clustered index is stored at a separate location from the actual database table. It is the non-clustered index which is actually similar to an index of a book. A book index is stored at a separate location, while the actual content of the book is separately located.

    非聚集索引是不对数据库记录进行物理排序的索引。 而是,非聚集索引存储在与实际数据库表不同的位置。 它实际上是与书籍索引相似的非聚集索引。 书籍索引存储在单独的位置,而书籍的实际内容则单独放置。

    The SQL CREATE INDEX query can be modified as follows to create a non-clustered index:

    可以如下修改SQL CREATE INDEX查询,以创建非聚集索引:

    CREATE NONCLUSTERED INDEX <index_name>
    ON <table_name>(<column_name> ASC/DESC)
    

    Let’s create a simple non-clustered index that sorts the records in the Books table by name. You can modify the SQL CREATE INDEX query as follows:

    让我们创建一个简单的非聚集索引,该索引按名称对Books表中的记录进行排序。 您可以按如下所示修改SQL CREATE INDEX查询:

    use BookStore
    CREATE NONCLUSTERED INDEX IX_tblBook_Name
    ON Books(name ASC)
    

    As I said earlier, the non-clustered index is stored at a location which is different from the location of the actual table, the non-clustered index that we created will look like this:

    如前所述,非聚集索引存储在与实际表的位置不同的位置,我们创建的非聚集索引如下所示:

    Name

    Record Address

    Book1

    Record address

    Book2

    Record address

    Book3

    Record address

    Book4

    Record address

    Book5

    Record address

    Book6

    Record address

    Book7

    Record address

    Book8

    Record address

    Book9

    Record address

    Book10

    Record address

    名称

    记录地址

    书1

    记录地址

    书2

    记录地址

    书3

    记录地址

    书4

    记录地址

    书5

    记录地址

    书6

    记录地址

    书7

    记录地址

    书8

    记录地址

    书9

    记录地址

    书10

    记录地址

    Now if a user searches for the name, id, and price of a specific book, the database will first search the book’s name in the non-clustered index. Once the book name is searched, the id and price of the book are searched from the actual table using the record address of the record in the actual table.

    现在,如果用户搜索特定书籍的名称,编号和价格,则数据库将首先在非聚集索引中搜索书籍的名称。 一旦搜索了书名,就使用实际表中记录的记录地址从实际表中搜索书的ID和价格。

    结论 (Conclusion)

    The article covers how to use SQL CREATE INDEX statement to create a clustered as well as a non-clustered index. The article also shows the main differences between the two types of clustered indexes with the help of examples.

    本文介绍了如何使用SQL CREATE INDEX语句创建聚簇索引和非聚簇索引。 本文还通过示例展示了两种类型的聚集索引之间的主要区别。

    翻译自: https://www.sqlshack.com/using-sql-create-index-to-create-clustered-and-non-clustered-indexes/

    sql聚簇索引和非聚簇索引

    展开全文
  • create clustered index a on S(SNO); exec sp_rename 'S.a','b','index';(把表S的索引a改名为b)

    create clustered index a on S(SNO);

     

    exec sp_rename 'S.a','b','index';(把表S的索引a改名为b)

     

     

     

    展开全文
  • 【数据库】聚簇索引创建与删除

    千次阅读 2019-12-15 16:35:16
    聚簇索引的概念: mysql中聚簇索引就是主键,并且不允许你设置非主键列为聚簇索引。...创建聚簇索引: unique 表示此索引的每一个索引值只对应唯一的数据记录 clustered 表示要建立的索引是聚...

    聚簇索引的概念

    mysql中聚簇索引就是主键,并且不允许你设置非主键列为聚簇索引。就算你不手动设置主键,mysql也会自动建一个隐藏的列做为主键

    例如,我创建course表的时候就隐藏出现了下图所示的情况,如果要建立聚簇索引,那么就必须删除这个自动设立的聚簇索引。

    创建聚簇索引:

    unique 表示此索引的每一个索引值只对应唯一的数据记录

    clustered 表示要建立的索引是聚簇索引(聚簇索引就是主键索引,因此必须唯一)

    1、create的创建方法

    create unique clustered index_name on table_name(<列名>[<次序>],<列名>[<次序>]...)

    2、alter的创建方法

    alter table table_name  add primary key  (列名)

    删除聚簇索引:

    前提是已经建立一个唯一的非聚簇索引,如此就可以顺利删除了,否则系统会因为没有聚集索引(主键)而操作不成功。

    1、 手动删除

    (1)右键点击带有钥匙标志的行

    (2)点击删除

     

    (3)点击右下方确定即可

    (4)剩余一个唯一的非聚簇索引

    2、语句删除

    (1)drop的删除格式

    drop index index_name on table_name

    (2)alter的删除格式

    alter table table_name drop primary key(列名) 

    展开全文
  • 1.聚簇索引 / 非聚簇索引 2.主键索引,唯一性索引 3.单个索引,复合索引 聚簇索引: 只能来自于采用INNODB存储引擎表的数据 Mysql自动将采用了INNODB存储引擎表中主键建立索引,这个索引就是聚簇索引 如果当前表中...

    索引分类

    1.聚簇索引 / 非聚簇索引
    2.主键索引,唯一性索引
    3.单个索引,复合索引

    聚簇索引:

    1. 只能来自于采用INNODB存储引擎表的数据
    2. Mysql自动将采用了INNODB存储引擎表中主键建立索引,这个索引就是聚簇索引
    3. 如果当前表中没有主键,MySql将会选择添加唯一性约束的字段作为聚簇索引
    4. 如果当前表中没有主键字段,也没有添加了唯一性约束字段 mysql将随机选取一个字段作为聚簇索引。
    5. 在采用innodb存储引擎的表文件中,必然会存在一个聚簇索引
    6. 在innodb存储引擎表文件中只能有一个聚簇索引。
    7. 在表文件中其他字段上建立的索引都是非聚簇索引

    非聚簇索引
    1.由开发人员自行创建
    2.对于采用innodb存储引擎表,除了一个聚簇索引之外,其他字段上创建的索引都是非聚簇索引
    3.在采用MyIsam存储引擎的表中,创建的所有索引都是非聚簇索引

    聚簇索引与非聚簇索引的区别

    1.聚簇索引:数据节点存储的[当前数据所在行数]以及[当前数据所在数据行的内容]
    2.非聚簇索引:数据节点存储的[当前数据所在行数]

    展开全文
  • 聚簇索引的特点是叶子节点包含了完整的记录行,而非聚簇索引的叶子节点只有所以字段和主键ID。 根据聚簇索引和非聚簇索引还能继续下分还能分为普通索引、覆盖索引、唯一索引以及联合索引等。 二、聚簇索引和非...
  • 通常情况下,建立索引是加快查询速度的有效手段。但索引不是万能的,靠索引并不能实现对所有数据的快速存取。事实上,如果索引策略和数据检索... 本文简要讨论一下聚簇索引的特点及其与非聚簇索引的区别。 建立索...
  • 聚簇索引和非聚簇索引(通俗易懂 言简意赅)

    千次阅读 多人点赞 2020-06-23 19:09:36
     一般建表会用一个自增主键做聚簇索引,没有的话MySQL会默认创建,但是这个主键如果更改代价较高,故建表时要考虑自增ID不能频繁update这点。  我们日常工作中,根据实际情况自行添加的索引都是辅助索引,辅助...
  • 聚簇索引 聚簇索引(Clustered Index)并不是一种新的数据结构,只是B树索引的一种存储方式。 聚簇索引的特点是完整的数据行就放在B树的叶子结点中,Clustered(聚簇,集群)就表示数据行与对应的键紧凑的存储在一起。 ...
  • B树与红黑树最广泛的应用就是数据库索引,熟练使用索引是程序员最重要的基本功之一。索引的数据结构可以是树,也可以是哈希表。常用的数据库都是树结构的索引,本篇的背景也全部以树结构的索引为前提。本文旨在梳理...
  • Mysql-聚簇索引

    千次阅读 2016-12-11 20:35:03
    1.innodb的主索引文件上 直接存放该行数据,称为聚簇索引,次索引指向对主键的引用 2.myisam中,主索引和次索引,都指向物理行(磁盘位置) 哈哈,说了两句貌似听不懂的话。 一。通俗解释 我们可以这么理解: 聚簇...
  • (从根儿上理解MySQL:10年老DBA告诉你1条记录在表中是如何存储的具体可以看看这里) 目前我对聚簇索引了解就这些了,下面我说说我对非聚簇索引的理解。 其实他们俩差不多,同样都是使用平衡树作为索引的数据结构。 ...
  • 聚簇索引与非聚簇索引学习总结

    千次阅读 2016-06-29 19:32:04
    聚簇索引与非聚簇索引的区别  通常情况下,建立索引是加快查询速度的有效手段。但索引不是万能的,靠索引并不能实现对所有 数据的快速存取。事实上,如果索引策略和数据检索需求严重不符的话,建立索引...
  • MySQL索引的数据类型、种类以及聚簇索引和非聚簇索引,我都为你准备好了
  • 聚簇索引(Clustered Index)和非聚簇索引(Non- Clustered Index)最通俗的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的索引顺序与数据物理排列顺序无关。举例来说,你翻到新华字典的汉字“爬”那一...
  • 聚簇,其实是相对于InnoDB这个数据库引擎来说的,因此在将聚簇索引的时候,我们通过InnoDB和MyISAM这两个MySQL的数据库引擎展开。 InnoDB和MyISAM的数据分布对比 CREATE TABLE test (col1 int NOT NULL, col2 int ...
  • 1、当我在基本表Student的Sname(姓名)列上建立一个聚簇索引,而且Student中的物理记录将按照Sname值的升序存放时,我最先使用的方式是直接建立一个索引(CREATE CLUSTERED INDEX Stu_Sname ON Student(Sname);...
  • 聚集索引和非聚集索引 聚集索引: 按照每张表的主键构造B+树,中间节点用来存放索引,叶子节点(数据页)用来存放行的全部数据,按照主键的顺序排序,每个数据页都通过一个双向链表来连接,因此,聚集索引能够在B+...
  • 索引的重要性 ...最通俗的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的索引顺序与数据物理排列顺序无关。举例来说,你翻到新华字典的汉字“爬”那一页就是P开头的部分,这就是物理存储顺
  • + 叶子节点的data域存储数据记录的地址(非聚簇索引) + 主键索引与普通索引结构一样 + 查询数据时,首先找到data域中的地址,然后再根据地址去磁盘中读数据 + 图示 ![]...
  • 通常情况下,建立索引是加快查询速度的有效手段。但索引不是万能的,靠索引并不能实现对所有数据的快速存取。事实上,如果索引策略和...本文简要讨论一下聚簇索引的特点及其与非聚簇索引的区别。 建立索引: 在S...
  • 什么是聚簇索引

    2021-04-26 13:25:28
    一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。 因为聚簇索引是按该列的排序存储的,因此一个表只能有一个聚簇索引。 数据库建立索引为什么会加快查询速度? DB在执行一条Sql语句的时候,默认...
  • 上次提到,mysql创建表结构时,如果使用的不是单一主键,而是联合主键,那么主键对应的索引会如何建立哪?没有实践,就没有发言权,今天就来进行一番彻底的比对实验把! create table test1(id1 int Not Null,id2 ...
  • 在InnoDB里,主键索引也被称为聚簇索引(clustered index)。 非主键索引的叶子节点内容是主键的值。在InnoDB里,非主键索引也被称为二级索引(secondary index)。 也就是说,基于非主键索引的查询需要多扫描一棵...
  • 聚簇索引和非聚簇索引(主键索引和非主键索引) 主键索引也被称为聚簇索引聚簇索引聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。聚簇索引将索引和数据行放到了一块,找到索引也就找到了数据。...
  • MySql 1、什么是索引?(index) 官方定义:一种帮助mysql提高查询效率的数据结构 索引的优缺点: 大大提高数据查询速度 ...设定为主键后数据库自动创建索引,innodb为聚簇索引 单列索引(单值索引
  •  一般建表会用一个自增主键做聚簇索引,没有的话MySQL会默认创建,但是这个主键如果更改代价较高,故建表时要考虑自增ID不能频繁update这点。  我们日常工作中,根据实际情况自行添加的索引都是辅助索引,辅助...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,589
精华内容 7,435
关键字:

创建聚簇索引语句