เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹, เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจ‡เฉฑเจ• DBMS เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจญเฉ‚เจฎเจฟเจ•เจพ เจจเจฟเจญเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจ, เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจฒเจˆ เจ‡เฉฑเจ• เจคเฉ‡เจœเจผ เจ–เฉ‹เจœ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจ‡เจธ เจฒเจˆ เจธเจฎเฉ‡เจ‚ เจธเจฟเจฐ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจธเฉ‡เจตเจพ เจ•เจฐเจจเจพ เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆเฅค เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ…เจคเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ เจฌเจพเจฐเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ€ เจธเจฎเฉฑเจ—เจฐเฉ€ เจฒเจฟเจ–เฉ€ เจ—เจˆ เจนเฉˆ, เจ‡เฉฐเจŸเจฐเจจเฉˆเจŸ เจธเจฎเฉ‡เจค. เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เจธ เจตเจฟเจธเจผเฉ‡ เจฆเฉ€ เจนเจพเจฒ เจนเฉ€ เจตเจฟเฉฑเจš เจธเจฎเฉ€เจ–เจฟเจ† เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€ เจ‡เจธ เจชเฉเจฐเจ•เจพเจธเจผเจจ.

เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจ…เจฆเจพเจ‡เจ—เฉ€ เจ…เจคเฉ‡ เจฎเฉเจซเจค เจนเฉฑเจฒ เจนเจจ. เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจฐเฉˆเจกเฉ€เจฎเฉ‡เจก เจนเฉˆ เจซเฉˆเจธเจฒเจพ, เจ‡เฉฑเจ• เจ…เจจเฉเจ•เฉ‚เจฒ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจ…เจจเฉเจ•เฉ‚เจฒเจจ เจตเจฟเจงเฉ€ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡เฅค

เจ…เฉฑเจ—เฉ‡, เจ†เจ“ เจฎเฉเจซเจค เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจตเฉ‡เจ–เฉ€เจ SQLIndexManager, เจฆเฉเจ†เจฐเจพ เจฒเฉ‡เจ–เจ• เจเจฒเจจเจกเฉˆเจ‚เจŸเจจ.

SQLIndexManager เจ…เจคเฉ‡ เจ•เจˆ เจนเฉ‹เจฐ เจเจจเจพเจฒเจพเจ—เจพเจ‚ เจตเจฟเจšเจ•เจพเจฐ เจฎเฉเฉฑเจ– เจคเจ•เจจเฉ€เจ•เฉ€ เจ…เฉฐเจคเจฐ เจฒเฉ‡เจ–เจ• เจฆเฉเจ†เจฐเจพ เจ–เฉเจฆ เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆ เจ‡เฉฑเจฅเฉ‡ ะธ เจ‡เฉฑเจฅเฉ‡.

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ…เจคเฉ‡ เจ‡เจธ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ เจนเฉฑเจฒ เจฆเฉ€เจ†เจ‚ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ‚ 'เจคเฉ‡ เจ‡เฉฑเจ• เจฌเจพเจนเจฐเฉ€ เจจเจœเจผเจฐ เจฎเจพเจฐเจพเจ‚เจ—เฉ‡เฅค

เจ‡เจธ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจฌเจพเจฐเฉ‡ เจšเจฐเจšเจพ เจ‡เฉฑเจฅเฉ‡.
เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจจเจพเจฒ, เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจฌเฉฑเจ— เจ เฉ€เจ• เจ•เฉ€เจคเฉ‡ เจ—เจ เจธเจจเฅค

เจ‡เจธ เจฒเจˆ, เจ†เจ“ เจนเฉเจฃ เจ†เจชเจฃเฉ‡ เจ†เจช SQLIndexManager เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจตเฉฑเจฒ เจตเจงเฉ€เจเฅค

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเจฟเจœเจผเฉ‚เจ…เจฒ เจธเจŸเฉ‚เจกเฉ€เจ“ 4.5 เจตเจฟเฉฑเจš C# .NET เจซเจฐเฉ‡เจฎเจตเจฐเจ• 2017 เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ€ เจ—เจˆ เจนเฉˆ เจ…เจคเฉ‡ เจซเจพเจฐเจฎเจพเจ‚ เจฒเจˆ DevExpress เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆ:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจ…เจคเฉ‡ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจธเจฆเจพ เจนเฉˆ:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจธเจพเจฐเฉ€เจ†เจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ:

  1. เจ‡เฉฐเจกเฉˆเจ•เจธ
  2. เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ›
  3. QueryEngine
  4. เจธเจฐเจตเจฐ เจœเจพเจฃเจ•เจพเจฐเฉ€

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจœเฉเฉœเจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ DBMS เจจเฉ‚เฉฐ เจธเจตเจพเจฒ เจญเฉ‡เจœเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจ…เจจเฉเจธเจพเจฐ เจฆเจธเจคเจ–เจค เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ:

ApplicationName=โ€SQLIndexManagerโ€

เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ‡เฉฑเจ• เจ•เจจเฉˆเจ•เจธเจผเจจ เจœเฉ‹เฉœเจจ เจฒเจˆ เจ‡เฉฑเจ• เจฎเจพเจกเจฒ เจตเจฟเฉฐเจกเฉ‹ เจ–เฉเฉฑเจฒเฉ‡เจ—เฉ€:
เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจ‡เฉฑเจฅเฉ‡, เจธเจฅเจพเจจเจ• เจจเฉˆเฉฑเจŸเจตเจฐเจ•เจพเจ‚ 'เจคเฉ‡ เจชเจนเฉเฉฐเจšเจฏเฉ‹เจ— เจธเจพเจฐเฉ‡ MS SQL เจธเจฐเจตเจฐ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจฆเฉ€ เจชเฉ‚เจฐเฉ€ เจธเฉ‚เจšเฉ€ เจฒเฉ‹เจก เจ•เจฐเจจเจพ เจ…เจœเฉ‡ เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจคเฉเจธเฉ€เจ‚ เจฎเฉเฉฑเจ– เจฎเฉ€เจจเฉ‚ 'เจคเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจ–เฉฑเจฌเฉ‡ เจฌเจŸเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจ•เจจเฉˆเจ•เจธเจผเจจ เจตเฉ€ เจœเฉ‹เฉœ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจ…เฉฑเจ—เฉ‡, DBMS เจฒเจˆ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจธเจตเจพเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ:

  1. DBMS เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ
    SELECT ProductLevel  = SERVERPROPERTY('ProductLevel')
         , Edition       = SERVERPROPERTY('Edition')
         , ServerVersion = SERVERPROPERTY('ProductVersion')
         , IsSysAdmin    = CAST(IS_SRVROLEMEMBER('sysadmin') AS BIT)
    

  2. เจ‰เจนเจจเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจธเฉฐเจ–เฉ‡เจช เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‰เจชเจฒเจฌเจง เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ
    SELECT DatabaseName = t.[name]
         , d.DataSize
         , DataUsedSize  = CAST(NULL AS BIGINT)
         , d.LogSize
         , LogUsedSize   = CAST(NULL AS BIGINT)
         , RecoveryModel = t.recovery_model_desc
         , LogReuseWait  = t.log_reuse_wait_desc
    FROM sys.databases t WITH(NOLOCK)
    LEFT JOIN (
        SELECT [database_id]
             , DataSize = SUM(CASE WHEN [type] = 0 THEN CAST(size AS BIGINT) END)
             , LogSize  = SUM(CASE WHEN [type] = 1 THEN CAST(size AS BIGINT) END)
        FROM sys.master_files WITH(NOLOCK)
        GROUP BY [database_id]
    ) d ON d.[database_id] = t.[database_id]
    WHERE t.[state] = 0
        AND t.[database_id] != 2
        AND ISNULL(HAS_DBACCESS(t.[name]), 1) = 1
    

เจ‰เจชเจฐเฉ‹เจ•เจค เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‡เฉฑเจ• เจตเจฟเฉฐเจกเฉ‹ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€ เจœเจฟเจธ เจตเจฟเฉฑเจš MS SQL เจธเจฐเจตเจฐ เจฆเฉ‡ เจšเฉเจฃเฉ‡ เจ—เจ เจ‰เจฆเจพเจนเจฐเจฃ เจฆเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฌเจพเจฐเฉ‡ เจธเฉฐเจ–เฉ‡เจช เจœเจพเจฃเจ•เจพเจฐเฉ€ เจนเฉ‹เจตเฉ‡เจ—เฉ€:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจ‡เจน เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฏเฉ‹เจ— เจนเฉˆ เจ•เจฟ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจฆเจฟเจ–เจพเจˆ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจ‰เฉฑเจฅเฉ‡ sysadmin, เจซเจฟเจฐ เจคเฉเจธเฉ€เจ‚ เจฆเฉเจฐเจฟเจธเจผ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจšเฉเจฃ เจธเจ•เจฆเฉ‡ เจนเฉ‹ sys.master_files. เจœเฉ‡เจ•เจฐ เจ…เจœเจฟเจนเฉ‡ เจ•เฉ‹เจˆ เจ…เจงเจฟเจ•เจพเจฐ เจจเจนเฉ€เจ‚ เจนเจจ, เจคเจพเจ‚ เจ˜เฉฑเจŸ เจกเจพเจŸเจพ เจตเจพเจชเจธ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจฌเฉ‡เจจเจคเฉ€ เจจเฉ‚เฉฐ เจนเฉŒเจฒเฉ€ เจจเจพ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เฉ‡เฅค

เจ‡เฉฑเจฅเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฆเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจ…เจคเฉ‡ "เจ เฉ€เจ• เจนเฉˆ" เจฌเจŸเจจ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ…เฉฑเจ—เฉ‡, เจธเฉ‚เจšเฉ€-เจชเฉฑเจคเจฐ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจ เจฒเจˆ เจนเจฐเฉ‡เจ• เจšเฉเจฃเฉ‡ เจนเฉ‹เจ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฒเจˆ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ:

เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจธเจฅเจฟเจคเฉ€ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ

declare @Fragmentation float=15;
declare @MinIndexSize bigint=768;
declare @MaxIndexSize bigint=1048576;
declare @PreDescribeSize bigint=32768;
SET NOCOUNT ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
IF OBJECT_ID('tempdb.dbo.#AllocationUnits') IS NOT NULL
DROP TABLE #AllocationUnits
CREATE TABLE #AllocationUnits (
ContainerID   BIGINT PRIMARY KEY
, ReservedPages BIGINT NOT NULL
, UsedPages     BIGINT NOT NULL
)
INSERT INTO #AllocationUnits (ContainerID, ReservedPages, UsedPages)
SELECT [container_id]
, SUM([total_pages])
, SUM([used_pages])
FROM sys.allocation_units WITH(NOLOCK)
GROUP BY [container_id]
HAVING SUM([total_pages]) BETWEEN @MinIndexSize AND @MaxIndexSize
IF OBJECT_ID('tempdb.dbo.#ExcludeList') IS NOT NULL
DROP TABLE #ExcludeList
CREATE TABLE #ExcludeList (ID INT PRIMARY KEY)
INSERT INTO #ExcludeList
SELECT [object_id]
FROM sys.objects WITH(NOLOCK)
WHERE [type] IN ('V', 'U')
AND ( [is_ms_shipped] = 1 )
IF OBJECT_ID('tempdb.dbo.#Partitions') IS NOT NULL
DROP TABLE #Partitions
SELECT [object_id]
, [index_id]
, [partition_id]
, [partition_number]
, [rows]
, [data_compression]
INTO #Partitions
FROM sys.partitions WITH(NOLOCK)
WHERE [object_id] > 255
AND [rows] > 0
AND [object_id] NOT IN (SELECT * FROM #ExcludeList)
IF OBJECT_ID('tempdb.dbo.#Indexes') IS NOT NULL
DROP TABLE #Indexes
CREATE TABLE #Indexes (
ObjectID         INT NOT NULL
, IndexID          INT NOT NULL
, IndexName        SYSNAME NULL
, PagesCount       BIGINT NOT NULL
, UnusedPagesCount BIGINT NOT NULL
, PartitionNumber  INT NOT NULL
, RowsCount        BIGINT NOT NULL
, IndexType        TINYINT NOT NULL
, IsAllowPageLocks BIT NOT NULL
, DataSpaceID      INT NOT NULL
, DataCompression  TINYINT NOT NULL
, IsUnique         BIT NOT NULL
, IsPK             BIT NOT NULL
, FillFactorValue  INT NOT NULL
, IsFiltered       BIT NOT NULL
, PRIMARY KEY (ObjectID, IndexID, PartitionNumber)
)
INSERT INTO #Indexes
SELECT ObjectID         = i.[object_id]
, IndexID          = i.index_id
, IndexName        = i.[name]
, PagesCount       = a.ReservedPages
, UnusedPagesCount = CASE WHEN ABS(a.ReservedPages - a.UsedPages) > 32 THEN a.ReservedPages - a.UsedPages ELSE 0 END
, PartitionNumber  = p.[partition_number]
, RowsCount        = ISNULL(p.[rows], 0)
, IndexType        = i.[type]
, IsAllowPageLocks = i.[allow_page_locks]
, DataSpaceID      = i.[data_space_id]
, DataCompression  = p.[data_compression]
, IsUnique         = i.[is_unique]
, IsPK             = i.[is_primary_key]
, FillFactorValue  = i.[fill_factor]
, IsFiltered       = i.[has_filter]
FROM #AllocationUnits a
JOIN #Partitions p ON a.ContainerID = p.[partition_id]
JOIN sys.indexes i WITH(NOLOCK) ON i.[object_id] = p.[object_id] AND p.[index_id] = i.[index_id] 
WHERE i.[type] IN (0, 1, 2, 5, 6)
AND i.[object_id] > 255
DECLARE @files TABLE (ID INT PRIMARY KEY)
INSERT INTO @files
SELECT DISTINCT [data_space_id]
FROM sys.database_files WITH(NOLOCK)
WHERE [state] != 0
AND [type] = 0
IF @@ROWCOUNT > 0 BEGIN
DELETE FROM i
FROM #Indexes i
LEFT JOIN sys.destination_data_spaces dds WITH(NOLOCK) ON i.DataSpaceID = dds.[partition_scheme_id] AND i.PartitionNumber = dds.[destination_id]
WHERE ISNULL(dds.[data_space_id], i.DataSpaceID) IN (SELECT * FROM @files)
END
DECLARE @DBID   INT
, @DBNAME SYSNAME
SET @DBNAME = DB_NAME()
SELECT @DBID = [database_id]
FROM sys.databases WITH(NOLOCK)
WHERE [name] = @DBNAME
IF OBJECT_ID('tempdb.dbo.#Fragmentation') IS NOT NULL
DROP TABLE #Fragmentation
CREATE TABLE #Fragmentation (
ObjectID         INT NOT NULL
, IndexID          INT NOT NULL
, PartitionNumber  INT NOT NULL
, Fragmentation    FLOAT NOT NULL
, PRIMARY KEY (ObjectID, IndexID, PartitionNumber)
)
INSERT INTO #Fragmentation (ObjectID, IndexID, PartitionNumber, Fragmentation)
SELECT i.ObjectID
, i.IndexID
, i.PartitionNumber
, r.[avg_fragmentation_in_percent]
FROM #Indexes i
CROSS APPLY sys.dm_db_index_physical_stats(@DBID, i.ObjectID, i.IndexID, i.PartitionNumber, 'LIMITED') r
WHERE i.PagesCount <= @PreDescribeSize
AND r.[index_level] = 0
AND r.[alloc_unit_type_desc] = 'IN_ROW_DATA'
AND i.IndexType IN (0, 1, 2)
IF OBJECT_ID('tempdb.dbo.#Columns') IS NOT NULL
DROP TABLE #Columns
CREATE TABLE #Columns (
ObjectID     INT NOT NULL
, ColumnID     INT NOT NULL
, ColumnName   SYSNAME NULL
, SystemTypeID TINYINT NULL
, IsSparse     BIT
, IsColumnSet  BIT
, MaxLen       INT
, PRIMARY KEY (ObjectID, ColumnID)
)
INSERT INTO #Columns
SELECT ObjectID     = [object_id]
, ColumnID     = [column_id]
, ColumnName   = [name]
, SystemTypeID = [system_type_id]
, IsSparse     = [is_sparse]
, IsColumnSet  = [is_column_set]
, MaxLen       = [max_length]
FROM sys.columns WITH(NOLOCK)
WHERE [object_id] IN (SELECT DISTINCT i.ObjectID FROM #Indexes i)
IF OBJECT_ID('tempdb.dbo.#IndexColumns') IS NOT NULL
DROP TABLE #IndexColumns
CREATE TABLE #IndexColumns (
ObjectID   INT NOT NULL
, IndexID    INT NOT NULL
, OrderID    INT NOT NULL
, ColumnID   INT NOT NULL
, IsIncluded BIT NOT NULL
, PRIMARY KEY (ObjectID, IndexID, ColumnID)
)
INSERT INTO #IndexColumns
SELECT ObjectID   = [object_id]
, IndexID    = [index_id]
, OrderID    = CASE WHEN [is_included_column] = 0 THEN [key_ordinal] ELSE [index_column_id] END
, ColumnID   = [column_id]
, IsIncluded = ISNULL([is_included_column], 0)
FROM sys.index_columns ic WITH(NOLOCK)
WHERE EXISTS(
SELECT *
FROM #Indexes i
WHERE i.ObjectID = ic.[object_id]
AND i.IndexID = ic.[index_id]
AND i.IndexType IN (1, 2)
)
IF OBJECT_ID('tempdb.dbo.#Lob') IS NOT NULL
DROP TABLE #Lob
CREATE TABLE #Lob (
ObjectID    INT NOT NULL
, IndexID     INT NOT NULL
, IsLobLegacy BIT
, IsLob       BIT
, PRIMARY KEY (ObjectID, IndexID)
)
INSERT INTO #Lob (ObjectID, IndexID, IsLobLegacy, IsLob)
SELECT c.ObjectID
, IndexID     = ISNULL(i.IndexID, 1)
, IsLobLegacy = MAX(CASE WHEN c.SystemTypeID IN (34, 35, 99) THEN 1 END)
, IsLob       = 0
FROM #Columns c
LEFT JOIN #IndexColumns i ON c.ObjectID = i.ObjectID AND c.ColumnID = i.ColumnID
WHERE c.SystemTypeID IN (34, 35, 99)
GROUP BY c.ObjectID
, i.IndexID
IF OBJECT_ID('tempdb.dbo.#Sparse') IS NOT NULL
DROP TABLE #Sparse
CREATE TABLE #Sparse (ObjectID INT PRIMARY KEY)
INSERT INTO #Sparse
SELECT DISTINCT ObjectID
FROM #Columns
WHERE IsSparse = 1
OR IsColumnSet = 1
IF OBJECT_ID('tempdb.dbo.#AggColumns') IS NOT NULL
DROP TABLE #AggColumns
CREATE TABLE #AggColumns (
ObjectID        INT NOT NULL
, IndexID         INT NOT NULL
, IndexColumns    NVARCHAR(MAX)
, IncludedColumns NVARCHAR(MAX)
, PRIMARY KEY (ObjectID, IndexID)
)
INSERT INTO #AggColumns
SELECT t.ObjectID
, t.IndexID
, IndexColumns = STUFF((
SELECT ', [' + c.ColumnName + ']'
FROM #IndexColumns i
JOIN #Columns c ON i.ObjectID = c.ObjectID AND i.ColumnID = c.ColumnID
WHERE i.ObjectID = t.ObjectID
AND i.IndexID = t.IndexID
AND i.IsIncluded = 0
ORDER BY i.OrderID
FOR XML PATH(''), TYPE).value('(./text())[1]', 'NVARCHAR(MAX)'), 1, 2, '')
, IncludedColumns = STUFF((
SELECT ', [' + c.ColumnName + ']'
FROM #IndexColumns i
JOIN #Columns c ON i.ObjectID = c.ObjectID AND i.ColumnID = c.ColumnID
WHERE i.ObjectID = t.ObjectID
AND i.IndexID = t.IndexID
AND i.IsIncluded = 1
ORDER BY i.OrderID
FOR XML PATH(''), TYPE).value('(./text())[1]', 'NVARCHAR(MAX)'), 1, 2, '')
FROM (
SELECT DISTINCT ObjectID, IndexID
FROM #Indexes
WHERE IndexType IN (1, 2)
) t
SELECT i.ObjectID
, i.IndexID
, i.IndexName
, ObjectName       = o.[name]
, SchemaName       = s.[name]
, i.PagesCount
, i.UnusedPagesCount
, i.PartitionNumber
, i.RowsCount
, i.IndexType
, i.IsAllowPageLocks
, u.TotalWrites
, u.TotalReads
, u.TotalSeeks
, u.TotalScans
, u.TotalLookups
, u.LastUsage
, i.DataCompression
, f.Fragmentation
, IndexStats       = STATS_DATE(i.ObjectID, i.IndexID)
, IsLobLegacy      = ISNULL(lob.IsLobLegacy, 0)
, IsLob            = ISNULL(lob.IsLob, 0)
, IsSparse         = CAST(CASE WHEN p.ObjectID IS NULL THEN 0 ELSE 1 END AS BIT)
, IsPartitioned    = CAST(CASE WHEN dds.[data_space_id] IS NOT NULL THEN 1 ELSE 0 END AS BIT)
, FileGroupName    = fg.[name]
, i.IsUnique
, i.IsPK
, i.FillFactorValue
, i.IsFiltered
, a.IndexColumns
, a.IncludedColumns
FROM #Indexes i
JOIN sys.objects o WITH(NOLOCK) ON o.[object_id] = i.ObjectID
JOIN sys.schemas s WITH(NOLOCK) ON s.[schema_id] = o.[schema_id]
LEFT JOIN #AggColumns a ON a.ObjectID = i.ObjectID AND a.IndexID = i.IndexID
LEFT JOIN #Sparse p ON p.ObjectID = i.ObjectID
LEFT JOIN #Fragmentation f ON f.ObjectID = i.ObjectID AND f.IndexID = i.IndexID AND f.PartitionNumber = i.PartitionNumber
LEFT JOIN (
SELECT ObjectID      = [object_id]
, IndexID       = [index_id]
, TotalWrites   = NULLIF([user_updates], 0)
, TotalReads    = NULLIF([user_seeks] + [user_scans] + [user_lookups], 0)
, TotalSeeks    = NULLIF([user_seeks], 0)
, TotalScans    = NULLIF([user_scans], 0)
, TotalLookups  = NULLIF([user_lookups], 0)
, LastUsage     = (
SELECT MAX(dt)
FROM (
VALUES ([last_user_seek])
, ([last_user_scan])
, ([last_user_lookup])
, ([last_user_update])
) t(dt)
)
FROM sys.dm_db_index_usage_stats WITH(NOLOCK)
WHERE [database_id] = @DBID
) u ON i.ObjectID = u.ObjectID AND i.IndexID = u.IndexID
LEFT JOIN #Lob lob ON lob.ObjectID = i.ObjectID AND lob.IndexID = i.IndexID
LEFT JOIN sys.destination_data_spaces dds WITH(NOLOCK) ON i.DataSpaceID = dds.[partition_scheme_id] AND i.PartitionNumber = dds.[destination_id]
JOIN sys.filegroups fg WITH(NOLOCK) ON ISNULL(dds.[data_space_id], i.DataSpaceID) = fg.[data_space_id] 
WHERE o.[type] IN ('V', 'U')
AND (
f.Fragmentation >= @Fragmentation
OR
i.PagesCount > @PreDescribeSize
OR
i.IndexType IN (5, 6)
)

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจธเจตเจพเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจ…เจธเจฅเจพเจˆ เจŸเฉ‡เจฌเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจ•เจธเจฐ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ‡เจธ เจฒเจˆ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจคเจพเจ‚ เจ•เจฟ เจ•เฉ‹เจˆ เจชเฉเจจเจฐ-เจธเฉฐเจ•เจฒเจจ เจจเจพ เจนเฉ‹เจตเฉ‡, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจตเฉฑเจกเฉ€ เจธเจ•เฉ€เจฎ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเฉฐเจฎเจฟเจฒเจฟเจค เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจฏเฉ‹เจœเจจเจพ เจจเฉ‚เฉฐ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจŸเฉ‡เจฌเจฒ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจธเจผเจพเจฎเจฒ เจ•เจฐเจจเจพ เจ•เฉ‡เจตเจฒ เจ‡เฉฑเจ• เจฅเฉเจฐเฉˆเจก เจตเจฟเฉฑเจš เจธเฉฐเจญเจต เจนเฉˆเฅค

เจ‰เจชเจฐเฉ‹เจ•เจค เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจธเจพเจฐเจฃเฉ€ เจตเจพเจฒเฉ€ เจ‡เฉฑเจ• เจตเจฟเฉฐเจกเฉ‹ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจฅเฉ‡ เจนเฉ‹เจฐ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจœเจพเจฃเจ•เจพเจฐเฉ€ เจตเฉ€ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ:

  1. เจกเจพเจŸเจพเจฌเฉ‡เจธ
  2. เจญเจพเจ—เจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€
  3. เจ†เจ–เจฐเฉ€ เจ•เจพเจฒ เจฆเฉ€ เจฎเจฟเจคเฉ€ เจ…เจคเฉ‡ เจธเจฎเจพเจ‚
  4. เจธเฉฐเจ•เฉเจšเจจ
  5. เจซเจพเจˆเจฒเจ—เจฐเฉเฉฑเจช

เจ…เจคเฉ‡ เจ‡เจธ เจคเจฐเจพเจ‚ เจนเฉ€.
เจธเจชเฉ€เจ•เจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ–เฉเจฆ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจซเจฟเจ•เจธ เจ•เจพเจฒเจฎ เจฆเฉ‡ เจธเฉˆเฉฑเจฒเจพเจ‚ เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ เจšเฉ‹เจฃ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจ“เจชเจŸเฉ€เจฎเจพเจˆเจœเฉ‡เจธเจผเจจ เจฆเฉŒเจฐเจพเจจ เจ•เจฟเจนเฉœเฉ€ เจ•เจพเจฐเจตเจพเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€เฅค เจจเจพเจฒ เจนเฉ€, เจœเจฆเฉ‹เจ‚ เจธเจ•เฉˆเจจ เจชเฉ‚เจฐเจพ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจšเฉเจฃเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจ‡เฉฑเจ• เจกเจฟเจซเฉŒเจฒเจŸ เจ•เจพเจฐเจตเจพเจˆ เจšเฉเจฃเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจคเฉเจนเจพเจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆเฅค

เจฎเฉเฉฑเจ– เจฎเฉ€เจจเฉ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡, เจคเฉเจธเฉ€เจ‚ เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ (เจ‰เจนเฉ€ เจฌเจŸเจจ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจ…เจจเฉเจ•เฉ‚เจฒเจจ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเจพ เจนเฉˆ):

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจ…เจคเฉ‡ เจŸเฉ‡เจฌเจฒ เจจเฉ‚เฉฐ เจตเฉฑเจ–-เจตเฉฑเจ– เจซเจพเจฐเจฎเฉˆเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจธเฉ‡เจต เจ•เจฐเฉ‹ (เจ‰เจนเฉ€ เจฌเจŸเจจ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ…เจคเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจ–เฉ‹เจฒเฉเจนเจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ):

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจคเฉเจธเฉ€เจ‚ เจตเฉฑเจกเจฆเจฐเจธเจผเฉ€ เจธเจผเฉ€เจธเจผเฉ‡ เจฆเฉ‡ เจ…เฉฑเจ—เฉ‡ เจฎเฉเฉฑเจ– เจฎเฉ€เจจเฉ‚ เจตเจฟเฉฑเจš เจ–เฉฑเจฌเฉ‡ เจชเจพเจธเฉ‡ เจคเฉ€เจœเฉ‡ เจฌเจŸเจจ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจ•เฉ‡ เจตเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจ‡เฉฑเจ• เจตเฉฑเจกเจฆเจฐเจธเจผเฉ€ เจธเจผเฉ€เจธเจผเฉ‡ เจตเจพเจฒเจพ เจฌเจŸเจจ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจตเจฟเจšเจพเจฐ เจ•เจฐเจจ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš เจ•เฉ‹เจˆ เจตเจฟเจ†เจชเจ• เจธเจนเจพเจ‡เจคเจพ เจชเฉเจฐเจฃเจพเจฒเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, โ€œ?โ€ เจฌเจŸเจจ เจฆเจฌเจพเจ“ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ เจ‰เจคเจชเจพเจฆ เจฌเจพเจฐเฉ‡ เจฎเฉเจขเจฒเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฐเฉฑเจ–เจฃ เจตเจพเจฒเฉ€ เจ‡เฉฑเจ• เจฎเจพเจกเจฒ เจตเจฟเฉฐเจกเฉ‹ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจ‰เฉฑเจชเจฐ เจฆเฉฑเจธเฉ€ เจนเจฐ เจšเฉ€เจœเจผ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจฎเฉเฉฑเจ– เจฎเฉ€เจจเฉ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ–เฉ‹เจœ เจชเฉฑเจŸเฉ€ เจนเฉˆ:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจ‡เฉฐเจกเฉˆเจ•เจธ เจ“เจชเจŸเฉ€เจฎเจพเจˆเจœเฉ‡เจธเจผเจจ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจคเฉเจธเฉ€เจ‚ เจตเจฟเฉฐเจกเฉ‹ เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจฆเจพ เจฒเฉŒเจ— เจตเฉ€ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ…เจคเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ เจฒเจˆ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจธเฉˆเจŸเจฟเฉฐเจ— เจตเจฟเฉฐเจกเฉ‹ เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ เจนเฉ‹เจฐ เจธเฉ‚เจ–เจฎ เจตเจฟเจ•เจฒเจชเจพเจ‚ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจ…เจฐเจœเจผเฉ€ เจฒเจˆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚:

  1. เจจเจพ เจธเจฟเจฐเจซเจผ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฒเจˆ เจ…เจคเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจจเจพเจฒ (เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ…เฉฑเจชเจกเฉ‡เจŸ เจœเจพเจ‚ เจ…เฉฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡) เจ…เฉฐเจ•เฉœเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจšเฉ‹เจฃเจตเฉ‡เจ‚ เจคเฉŒเจฐ 'เจคเฉ‡ เจ…เฉฑเจชเจกเฉ‡เจŸ เจ•เจฐเจจเจพ เจธเฉฐเจญเจต เจฌเจฃเจพเจ“เฅค
  2. เจ‡เจธ เจจเฉ‚เฉฐ เจจเจพ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจกเจพเจŸเจพเจฌเฉ‡เจธ เจšเฉเจฃเจจเจพ เจธเฉฐเจญเจต เจฌเจฃเจพเจ“, เจธเจ—เฉ‹เจ‚ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฐเจตเจฐ เจตเฉ€ (เจ‡เจน เจฌเจนเฉเจค เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉˆ เจœเจฆเฉ‹เจ‚ MS SQL เจธเจฐเจตเจฐ เจฆเฉ€เจ†เจ‚ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ)
  3. เจตเจฐเจคเฉ‹เจ‚ เจตเจฟเฉฑเจš เจตเจงเฉ‡เจฐเฉ‡ เจฒเจšเจ•เจคเจพ เจฒเจˆ, เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฎเฉ‡เจŸเจฃ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ PowerShell เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจตเจฟเฉฑเจš เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจ•เจฐเจจ เจฆเจพ เจธเฉเจเจพเจ… เจฆเจฟเฉฑเจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจฅเฉ‡:
  4. dbatools.io/commands
  5. MS SQL เจธเจฐเจตเจฐ เจ…เจคเฉ‡ เจนเจฐเฉ‡เจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉ‡ เจนเจฐเฉ‡เจ• เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจชเฉ‚เจฐเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฒเจˆ เจ…เจคเฉ‡, เจœเฉ‡ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡, เจฆเฉ‹เจตเจพเจ‚ เจฒเจˆ เจจเจฟเฉฑเจœเฉ€ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจฌเจฆเจฒเจฃเจพ เจธเฉฐเจญเจต เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค
  6. เจชเฉเจ†เจ‡เฉฐเจŸ 2 เจ…เจคเฉ‡ 4 เจคเฉ‹เจ‚, เจ‡เจน เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจนเฉˆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฆเฉเจ†เจฐเจพ เจธเจฎเฉ‚เจน เจ…เจคเฉ‡ MS SQL เจธเจฐเจตเจฐ เจ‰เจฆเจพเจนเจฐเจจเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจธเจฎเฉ‚เจน เจฌเจฃเจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจœเจฟเจธ เจฒเจˆ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจ‡เฉฑเจ•เฉ‹ เจœเจฟเจนเฉ€เจ†เจ‚ เจนเจจ
  7. เจกเฉเจชเจฒเฉ€เจ•เฉ‡เจŸ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเฉ‹ (เจชเฉ‚เจฐเฉ‡ เจ…เจคเฉ‡ เจ…เจงเฉ‚เจฐเฉ‡, เจœเฉ‹ เจ•เจฟ เจœเจพเจ‚ เจคเจพเจ‚ เจฅเฉ‹เฉœเฉ‡ เจตเฉฑเจ–เจฐเฉ‡ เจนเจจ เจœเจพเจ‚ เจธเจฟเจฐเจซ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡ เจ•เจพเจฒเจฎเจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฑเจ–เจฐเฉ‡ เจนเจจ)
  8. เจ•เจฟเจ‰เจ‚เจ•เจฟ SQLIndexManager เจธเจฟเจฐเจซเจผ MS SQL เจธเจฐเจตเจฐ DBMS เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจ‡เจธเจจเฉ‚เฉฐ เจจเจพเจฎ เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ‰เจฃเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจ…เจจเฉเจธเจพเจฐ: MS SQL เจธเจฐเจตเจฐ เจฒเจˆ SQLIndexManager
  9. เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจ—เฉˆเจฐ-GUI เจญเจพเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฑเจ–เจฐเฉ‡ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจตเจฟเฉฑเจš เจฒเฉˆ เจœเจพเจ“ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ .NET เจ•เฉ‹เจฐ 2.1 เจตเจฟเฉฑเจš เจฆเฉเจฌเจพเจฐเจพ เจฒเจฟเจ–เฉ‹เฅค

เจฒเจฟเจ–เจฃ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจ‡เฉฑเจ›เจพเจตเจพเจ‚ เจฆเฉ€ เจ†เจˆเจŸเจฎ 6 เจจเฉ‚เฉฐ เจธเจฐเจ—เจฐเจฎเฉ€ เจจเจพเจฒ เจตเจฟเจ•เจธเจค เจ•เฉ€เจคเจพ เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเฉฐเจชเฉ‚เจฐเจจ เจ…เจคเฉ‡ เจธเจฎเจพเจจ เจกเฉเจชเจฒเฉ€เจ•เฉ‡เจŸเจพเจ‚ เจฆเฉ€ เจ–เฉ‹เจœ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจธเจฎเจฐเจฅเจจ เจนเฉˆ:

เจฎเฉเจซเจค เจŸเฉ‚เจฒ SQLIndexManager เจฆเฉ€ เจธเจฎเฉ€เจ–เจฟเจ† เจ•เจฐเฉ‹

เจธเจฐเฉ‹เจค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹