CSkin博客

标题: 【数据库】缺失索引自动创建语句 [打印本页]

作者: OneAPM    时间: 2016-4-18 13:35
标题: 【数据库】缺失索引自动创建语句
引言
一直以来,关于索引的常见问题是:判断哪部分索引对保证数据库的良好性能是必需的。在本文中,笔者将提供针对该问题的解决方案。本文用例中的所有代码都基于名为dm_db_missing_index_details 的 SQL Server 系统视图。

背景
在开始安装前,进一步了解 dm_db_missing_index_details 会更有益处。
dm_db_missing_index_details 会返回缺失索引的细节信息。在本文中,我们将更关注以下几列:

实现
本系统的实现基于以下三个实体:
笔者选择将这个系统分为三段进程,但实际上合并存储过程和视图也是可行的。笔者之所以没有选择后一种做法是因为想在创建索引之前先从业务逻辑检查一下存在哪些索引。

使用代码
函数 fn_Index_CreateIndexName
在这个函数中,有三个输入参数:
该函数的目的是为每个期望创建的索引都创建一个唯一名称。
[SQL] 纯文本查看 复制代码
    CREATE FUNCTION [dbo].[fn_Index_CreateIndexName (@equality_columns NVARCHAR(4000), _
    @Inequality_columns NVARCHAR(4000), @index_handlE INT) RETURNS VARCHAR(128)
    AS
    BEGIN
    DECLARE @IndexName NVARCHAR(255)
    SET @IndexName = ISNULL(@equality_columns,@Inequality_columns)
    SET @IndexName = LTRIM(REPLACE(@IndexName,'[','_'))
    SET @IndexName = RTRIM(REPLACE(@IndexName,']','_'))
    SET @IndexName = REPLACE(@IndexName,',','')
    SET @IndexName = REPLACE(@IndexName,'_ _','_')
    IF LEN(@IndexName) > 120
    BEGIN
        SET @IndexName = SUBSTRING(@IndexName,0,120)
    END  
    SET @IndexName = @IndexName + CAST(@index_handlE AS NVARCHAR(15))
    RETURN @IndexName
    END

作者: 泥瓦匠    时间: 2016-4-28 14:22
没看明白!
作者: jhyjhy213    时间: 2019-10-11 08:48
感谢分享
作者: jhyjhy213    时间: 2019-10-24 09:23
感谢分享




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2