• 使用SQL Server 索引中的包含性列的索引(Include)


    抓取出来的执行SQL如下,40W的数据Inner Join 3W的数据:

    declare @p11 int
    set @p11=15
    declare @p12 int
    set @p12=1
    exec SP_GSP_Get_Data_Paged @Tables=N'QRY_WORKITEM INNER JOIN MV_XSDD ON ROOTPROCINSTID = MV_XSDD."ProcessInstanceID"',@Fields=N' MV_XSDD."SalesOrderCode", MV_XSDD."BTypename", MV_XSDD."SaleToName", MV_XSDD."CustomField2", MV_XSDD."LSBMZD_BMMC", MV_XSDD."LSWLDW_DWMC",QRY_WORKITEM.STARTEDDATE,QRY_WORKITEM.PROCESSINSTANCEID,QRY_WORKITEM.ACTIVITYDEFINITIONID ,

    QRY_WORKITEM.PROCESSDEFINITIONID ,QRY_WORKITEM.WORKITEMID,QRY_WORKITEM.WORKTYPE',@PK=N'WORKITEMID',

    @Filter=N'QRY_WORKITEM.Participant = ''25ef7e1c-f205-4982-a684-1b6b1ab210f7'' and QRY_WORKITEM.State=''2'' AND QRY_WORKITEM.BIZPROCID = ''6c62d818-9d4f-47db-b63c-264b0982ced3''',@Sort=N'STARTEDDATE',@PageSize=220,@PageNumber=1,@AppendantTables=N'',@AppendantFilter=N'QRY_WORKITEM.Participant = ''25ef7e1c-f205-4982-a684-1b6b1ab210f7'' and QRY_WORKITEM.State=''2'' AND QRY_WORKITEM.BIZPROCID = ''6c62d818-9d4f-47db-b63c-264b0982ced3''',@AppendantSort=N'',@RecordCount=@p11 output,@RevisedPageNumber=@p12 output

     

    具有包含性列的索引

    在 SQL Server 2005 中,可以通过将非键列添加到非聚集索引的叶级别来扩展非聚集索引的功能。通过包含非键列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有下列优点:

    • 它们可以是不允许作为索引键列的数据类型。 
    • 在计算索引键列数或索引键大小时,数据库引擎不考虑它们。

    当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显著提高查询性能。这样可以实现性能提升,因为查询优化器可以在索引中找到所有列值;不访问表或聚集索引数据,从而减少磁盘 I/O 操作。

    CREATE NONCLUSTERED INDEX [WORKITEM_CHA_ID] ON [WORKITEM] 
    (
    [PARTICIPANT] ASC,
    [STATE] ASC,
    [BIZPROCID] ASC
    )
    INCLUDE ( [WORKITEMID],
    [STARTEDDATE],
    [ROOTPROCINSTID])

    GO

    新增上这个索引后,查询提高到1秒

  • 相关阅读:
    PHP trim() 函数
    php 计算2个日期的相差天数
    php date('Y-n-j')的和date('Y-m-d')的区别
    转移服务器
    Invalid argument supplied for foreach()解决办法
    wordpress 后台忘记密码怎么办
    qrcode js插件生成微信二维码
    thinkphp5 注释
    tp5 新增完数据,获取id
    resstFul服务文件上传下载
  • 原文地址:https://www.cnblogs.com/liyongjian/p/3009717.html
Copyright © 2020-2023  润新知