当前位置:   article > 正文

SQL server 构建索引的demo

SQL server 构建索引的demo

CREATE INDEX idx_dt ON dim_ku (dt) 
CREATE NONCLUSTERED INDEX idx_dim_ku_dt ON [dim_ku] (dt) INCLUDE (ord, num2, FinaMoney, locked,locknum,product_title)
CREATE NONCLUSTERED INDEX idx_dim_ku_dt_ck ON [dim_ku] (dt) INCLUDE (ord, num2, FinaMoney, ck, locked,locknum,product_title, sortck_sort1)
CREATE NONCLUSTERED INDEX idx_dim_ku_dt_dayDiff ON [dim_ku] (dt, dayDiff) INCLUDE (FinaMoney)
CREATE NONCLUSTERED INDEX idx_dim_ku_dt_Status ON [dim_ku] (dt, Status) INCLUDE (FinaMoney)
CREATE NONCLUSTERED INDEX idx_dim_ku_dt_daterk ON [dim_ku] (dt, daterk) INCLUDE (ord, FinaMoney, product_title)
 

删除索引

DROP INDEX idx_ods_M2_WorkAssigns_dt ON ods_M2_WorkAssigns;

警告! 最大键长度为 900 个字节。索引 'idx_ods_M2_WorkAssigns_dt' 的最大长度为 8003 个字节。对于某些大值组合,插入/更新操作将失败。

字段太长 改为构建前缀索引(没验证过,后继可以尝试下)

-- 首先,如果表`ods_M2_WorkAssigns`中还没有包含截取前100个字符的列,则创建一个: ALTER TABLE ods_M2_WorkAssigns ADD Cateid_WA_Prefix AS LEFT(Cateid_WA, 100) PERSISTED;

-- 然后,在新创建的计算列和dt字段上创建非聚集索引

CREATE NONCLUSTERED INDEX idx_ods_M2_WorkAssigns_dt ON [ods_M2_WorkAssigns] (dt, Cateid_WA_Prefix);

最后改为 

CREATE NONCLUSTERED INDEX idx_ods_M2_WorkAssigns_dt ON [ods_M2_WorkAssigns] (dt) INCLUDE (Cateid_WA)

速度也还可以

该SQL语句是创建一个名为idx_ods_M2_WorkAssigns_dt的非聚集索引,应用于表ods_M2_WorkAssigns。索引结构如下:

  1. 索引键(Key Columns):只包含dt字段。这意味着索引将按dt字段的值进行排序。

  2. 包含列(Included Columns):包含Cateid_WA字段。虽然Cateid_WA字段不在索引键中,但其值会被包含在索引内部的每个索引叶级页中。这样,在执行查询时,如果查询条件涉及到dt字段,并且需要返回Cateid_WA字段的值,那么数据库可以直接从索引中获取所需数据,而无需额外回表操作,从而提高查询性能。

总结:这个索引主要用于优化那些以dt为筛选条件并需要返回Cateid_WA字段的查询场景。

----------------------------------------------------------------

CREATE NONCLUSTERED INDEX 与 CREATE INDEX 的区别

在SQL Server以及许多其他关系型数据库系统中,CREATE INDEX 是创建索引的通用语法。而 CREATE NONCLUSTERED INDEX 则是更具体地指定了要创建的是非聚集索引。

区别如下:

  1. CREATE INDEX:

    • 这是一个包含所有类型索引(如聚集索引和非聚集索引)的泛称语法。
    • 如果不指定聚集或非聚集,则具体的索引类型可能依赖于数据库系统的默认行为或当前表上已经存在的索引情况。
  2. CREATE NONCLUSTERED INDEX:

    • 明确指定了创建的是非聚集索引。
    • 非聚集索引与数据行在物理存储上的顺序无关。它有一个独立的结构,通常称为B树或B+树,叶子节点包含指向实际数据行的指针。
    • 非聚集索引可以针对一个或多个列创建,并且可以在同一个表上创建多个非聚集索引以支持不同的查询路径。
  3. 对比聚集索引(Clustered Index):

    • 聚集索引决定了表中数据行的物理存储顺序。
    • 表只能有一个聚集索引,因为数据只能按照一种物理顺序排列。
    • 在聚集索引中,叶子级别就是实际的数据行,而不是指向数据行的指针。

所以,在SQL Server中,当你使用 CREATE INDEX 并未明确指定类型时,如果没有聚集索引存在,可能会默认创建一个聚集索引(具体情况取决于数据库版本、设置及语句中的详细信息),或者如果已经有聚集索引,则将创建非聚集索引。而 CREATE NONCLUSTERED INDEX 则始终确保创建的是非聚集索引。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/263073
推荐阅读
相关标签
  

闽ICP备14008679号