SQL 索引

  1. 查看索引
    exec sp_helpindex tablename
  2. 删除索引
    drop index index_name on table_name
  3. 创建索引
    1 --唯一 聚集索引
    2 CREATE UNIQUE CLUSTERED INDEX indexName ON tableName(column_name[asc,desc]) 
    3 --不唯一 非聚集索引
    4 CREATE  NONCLUSTERED INDEX indexName ON tableName(column_name[asc,desc])
    5 --唯一 非聚集索 
    6 CREATE   UNIQUE NONCLUSTERED indexName ON tableName(column_name[asc,desc])

    临时表也可以直接创建
    CREATE NONCLUSTERED INDEX IDX_tme
    ON  #temp(column_name1)
    INCLUDE (column2,column3)
    注:
    1、聚集索引每个表只能有一个;
    2、如果索引有多列,第一个列才会用到索引查找,其余的是索引扫描;
    3、INCLUDE是索引包含列,不会进行表排序
    create index idx_A on A(biz_date)  include(name,id)
  4. 显示估计的执行计划
    [Table Scan] 表扫描(最慢),对表记录逐行进行检查
    [Clustered Index Scan] 聚集索引扫描(较慢),按聚集索引对记录逐行进行检查
    [Index Scan] 索引扫描(普通),根据索引滤出部分数据在进行逐行检查
    [Index Seek] 索引查找(较快),根据索引定位记录所在位置再取出记录
    [Clustered Index Seek] 聚集索引查找(最快),直接根据聚集索引获取记录
  5. 命名规范
    主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名
  6. 查看效率
    DBCC DROPCLEANBUFFERS  --清除缓冲区
    DBCC FREEPROCCACHE  --删除计划高速缓存中的元素
    --清缓存生产慎用
    
    SET STATISTICS TIME ON --执行时间
    SET STATISTICS IO ON--执行IO
    select * from test
    SET STATISTICS IO OFF
  7. 查看索引所占空间
    exec sp_spaceused 'index'
  8. 创建索引视图
    create view v_customer_sch_index with schemabinding
    as
    select Col1,Col2 from dbo.test
    go
    
    create unique clustered index cust_uniquetb on v_customer_sch_index(Col1)
    注:索引视图创建的第一个索引必须是唯一聚集索引
    
    强制走视图索引
    select * from test with(noexpand)
posted @ 2021-08-11 10:05  疯狂阿坤  阅读(121)  评论(0编辑  收藏  举报