zoukankan      html  css  js  c++  java
  • SqlServer--索引相关操作

    索引的优点

       1、通过创建索引,可以保证数据库中每一行数据的唯一性。

       2、可以大大加快查询数据的速度,这也是创建索引的最主要原因。

       3、实现数据的参照完整性,可以加速表之间的连接。

       4、在使用分组、排序的时候,可以减少查询中分组、排序的时间。

    弊端

     1、创建索引和维护索引需耗费时间,随着数据量的增加维护索引的时间也会增加。

     2、索引跟table一样会占用一定的物理空间,若是在数据库中有大量的索引,索引文件可能比数据文件更快达到文件最大容量(尺寸)。

     3、当对表中的数据进行增、删、改这些操作时,索引也要动态地维护,这样就降低了数据的维护速度。

    索引的分类

    聚集索引、非聚集索引

     聚集索引

          按照table中的数据表中一定存储的顺序,基于table中的数据行。

    特点

           1、一个table中只能有一个聚集索引。

           2、表中的物理顺序跟聚集索引的顺序是一样的,创建任何非聚集索引之前一定要先创建聚集索引,因为非聚集索引改变了table中行的物理顺序。

           3、关键值使用唯一性的UNIQUE关键字或者内部唯一标识符明确维护。一定要是惟一的标识符

           4、在创建索引的过程中,SQL Server临时使用当前数据库的磁盘空间,要保证磁盘由足够的空间。

     索引分为这几种

       索引视图、XML索引、唯一索引、组合索引、聚集索引、非聚集索引、筛选索引、空间索引、全文索引、包含列索引

       注 组合索引的条件字段最好不要超过4个,假设超过4个,就换成多个简单的组合索引

    创建索引的原则

      建议不创索引

           数据量少的table不创,避免在多列创建索引,列中的相同值少的不创

    建议创的

           数据量多,相同值少,在频繁进行组合、排序的列上建立组合索引(4个字段就不建组合索引)

           当数据为table中唯一性数据,引用唯一索引可以提高查询速度

    UNIQUE  在表或视图中创建唯一性索引,唯一索引不允许两行具有相同的索引建值,视图的聚集索引必须为唯一。

    CLUSTERED  为表或视图创建聚集索引,在创建聚集索引的时候同时会重新生成现有表中的所有非聚集索引。

    NONCLUSTERED  创建非聚集索引,聚集索引按照table中字段的排序,快速准确的找到所需值。非聚集索引先找到一个大的区域,再缩小范围去找值。

    index_name     指定索引的名称  在视图(表)中索引名称必须是唯一的

    ON  指定索引所属的表或视图

    Column   指定索引基于一列或多列。指定两个或多个列名。组合索引

    ASC  DESC 索引进行排序

    DROP_EXISTING  指定删除的索引并重新生成已命名的先前存在的聚集和非聚集索引。

    创建一个Table叫 authors

    create table authors

    (

      auth_id  int  identity(1,1)not null,

      auth_name  varchar(20) not null,  

      auth_gender  tinyint  not null,

      auth_phone  varchar(20) null,

      auth_note  varchar(100) null

    );

    在authors表中的auth_phone列上,创建一个名称为IdX_phone的唯一索引,降序排序,填充因子为30%。

    CREATE  UNIQUE  NONCLUSTERED  INDEX IdX_phone

    ON authors(auth_phone DESC)

    WITH

    FILLFACTOR=30;

    在authors表中的auth_phone列上,创建一个名称为IdX_nameAndgender的唯一非聚集组合索引,升序排序,填充因子为10%。

    CREATE UNIQUE NONCLUSTERED INDEXC IdX_nameAndgender 

    ON authors(auth_name,auth_gender)

    WITH

    FILLFACTOR=10;

     用存储过程看test中 ‘outhors’ 索引

    go 
    exec  sp_helpindex  'authors'   --查看authors
    
    Index_description  :索引中的信息
    Index_key              :索引中的列(表中)
    Index_name           :索引名字
    

      

    创建索引

    创建一个名为autrh_phone的索引
      在auth_phone列上,创建一个名为Idx_SY的唯一聚集索引,降序排序,填充因子为30%.
    create unique clustered Index Id_SY
    on authous (auth_phone  DESC)
    with
    fillfactor=30;
    

     

    在authors表中的anth_name和auth_gender列上,创建一个名称为Idx_nameAndgender的唯一非聚集组合索引,升序排序,填充因子为10%

    CREATE UNIQUE NONCLUSTERED INDEX Idx nameAndgender
    ON  authors(auth_name,auth_gender)
    WITH
    FILLFACTOR=10;
    

    用存储过程看索引

    用索引看表authours中的Idx_phone索引统计信息
    
    dbcc  show_statistics (‘test.dbo.authour’,Idx_phone)
    

      

    修改索引名

    用系统中的存储过程
    
    语法:
            sp_rename  'object_name' , ' new_name','object_type'
      object_name --当前索引名   new_name  新名字  object_type 对象类型
    
    eg:修改authours表中的idx_nameAndgerder改为mnlti_index
            sp_rename ‘idx_nameAndgender’,‘mnlti_index’,‘database’
    

    修改索引的类型  

        列 column     数据名修改时用 database

        用户定义索引  Index     重命名索引  object

        userdatatype  通过 create type 或 sp_addtype 天剑别名数据类型或clr用户定义类型

    当前数据库名改变

    sp_rename 'idx_nameAndgender','multi_index' ,'index';
    

    删除索引

    DROP INDEX 'index' on [ table | view ]
    
    table|view 索引所在的表(视图)  index  删除指定索引名的索引
    
    注:
          drop index 不能删含 create table 或 alter table 命令创建的主键或唯一索引
    
    删除表authours 中索引 multi_index
    
    exec  sp_helpindex 'authors'
    
    drop index authors.multi_index
    exec sp_helpindex 'authors'
    

      

      

     

      

    记一记流水账

  • 相关阅读:
    ef unitofwork 主从表更新
    自己写的enum转换的一个扩展,
    最近在做政务项目,此种项目,本来并不大,主要原因呢,就是要理好业务需要。
    sql server创建外键,子母表,级联删除。
    js querySelector与getElementById
    写一个system.data.entity的simpledatarepo,实现crudq这些功能,不需要引入entityframework,直接可以使用,用到objectset
    无法更新 EntitySet“W_ReceiveData”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操作的 <InsertFunction> 元素。
    Kubernetes v1.17 版本解读 | 云原生生态周报 Vol. 31
    开放下载 | 《Knative 云原生应用开发指南》开启云原生时代 Serverless 之门
    有了 serverless,前端也可以快速开发一个 Puppeteer 网页截图服务
  • 原文地址:https://www.cnblogs.com/leiminghui/p/13138025.html
Copyright © 2011-2022 走看看