1- -- Compile Date: 03/24 /2026 19:28:29 UTC
1+ -- Compile Date: 03/25 /2026 13:41:18 UTC
22SET ANSI_NULLS ON;
33SET ANSI_PADDING ON;
44SET ANSI_WARNINGS ON;
@@ -16393,9 +16393,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1639316393 schema_id = s.schema_id,
1639416394 schema_name = s.name,
1639516395 object_id = i.object_id,
16396- table_name = ISNULL(t .name, v.name) ,
16396+ table_name = o .name,
1639716397 index_id = i.index_id,
16398- index_name = ISNULL(i.name, ISNULL(t .name, v.name) + N''.Heap''),
16398+ index_name = ISNULL(i.name, o .name + N''.Heap''),
1639916399 can_compress =
1640016400 CASE
1640116401 WHEN p.index_id > 0
@@ -16404,20 +16404,18 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1640416404 ELSE 0
1640516405 END
1640616406 FROM ' + QUOTENAME(@current_database_name) + N'.sys.indexes AS i
16407- LEFT JOIN ' + QUOTENAME(@current_database_name) + N'.sys.tables AS t
16408- ON i.object_id = t.object_id
16409- LEFT JOIN ' + QUOTENAME(@current_database_name) + N'.sys.views AS v
16410- ON i.object_id = v.object_id
16407+ JOIN ' + QUOTENAME(@current_database_name) + N'.sys.objects AS o
16408+ ON i.object_id = o.object_id
1641116409 JOIN ' + QUOTENAME(@current_database_name) + N'.sys.schemas AS s
16412- ON ISNULL(t .schema_id, v.schema_id) = s.schema_id
16410+ ON o .schema_id = s.schema_id
1641316411 JOIN ' + QUOTENAME(@current_database_name) + N'.sys.partitions AS p
1641416412 ON i.object_id = p.object_id
1641516413 AND i.index_id = p.index_id
1641616414 /* LEFT JOIN to dm_db_index_usage_stats removed 2026-01-15 - was dead code with no columns selected */
16417- WHERE (t.object_id IS NULL OR t. is_ms_shipped = 0)
16418- AND (t.object_id IS NULL OR t. type <> N''TF '')
16419- AND i.is_disabled = 0
16420- AND i.is_hypothetical = 0';
16415+ WHERE o. is_ms_shipped = 0
16416+ AND o. type IN ( N''U'', N''V '')
16417+ AND i.is_disabled = 0
16418+ AND i.is_hypothetical = 0';
1642116419
1642216420 IF @supports_temporal_tables = 1
1642316421 BEGIN
@@ -16917,9 +16915,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1691716915 schema_id = s.schema_id,
1691816916 schema_name = s.name,
1691916917 os.object_id,
16920- table_name = ISNULL(t .name, v.name) ,
16918+ table_name = o .name,
1692116919 os.index_id,
16922- index_name = ISNULL(i.name, ISNULL(t .name, v.name) + N''.Heap''),
16920+ index_name = ISNULL(i.name, o .name + N''.Heap''),
1692316921 range_scan_count = SUM(os.range_scan_count),
1692416922 singleton_lookup_count = SUM(os.singleton_lookup_count),
1692516923 forwarded_fetch_count = SUM(os.forwarded_fetch_count),
@@ -16957,12 +16955,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1695716955 NULL,
1695816956 NULL
1695916957 ) AS os
16960- LEFT JOIN ' + QUOTENAME(@current_database_name) + N'.sys.tables AS t
16961- ON os.object_id = t.object_id
16962- LEFT JOIN ' + QUOTENAME(@current_database_name) + N'.sys.views AS v
16963- ON os.object_id = v.object_id
16958+ JOIN ' + QUOTENAME(@current_database_name) + N'.sys.objects AS o
16959+ ON os.object_id = o.object_id
1696416960 JOIN ' + QUOTENAME(@current_database_name) + N'.sys.schemas AS s
16965- ON ISNULL(t .schema_id, v.schema_id) = s.schema_id
16961+ ON o .schema_id = s.schema_id
1696616962 JOIN ' + QUOTENAME(@current_database_name) + N'.sys.indexes AS i
1696716963 ON os.object_id = i.object_id
1696816964 AND os.index_id = i.index_id
@@ -16980,7 +16976,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1698016976 s.schema_id,
1698116977 s.name,
1698216978 os.object_id,
16983- ISNULL(t .name, v.name) ,
16979+ o .name,
1698416980 os.index_id,
1698516981 i.name
1698616982 OPTION(RECOMPILE);
@@ -17063,6 +17059,66 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1706317059 RAISERROR('Generating #index_details insert', 0, 0) WITH NOWAIT;
1706417060 END;
1706517061
17062+ /*Stage dm_db_index_usage_stats for this database to avoid repeated DMV scans*/
17063+ IF OBJECT_ID(N'tempdb..#usage_stats') IS NOT NULL
17064+ BEGIN
17065+ TRUNCATE TABLE #usage_stats;
17066+ END;
17067+ ELSE
17068+ BEGIN
17069+ CREATE TABLE
17070+ #usage_stats
17071+ (
17072+ object_id int NOT NULL,
17073+ index_id int NOT NULL,
17074+ user_seeks bigint NOT NULL,
17075+ user_scans bigint NOT NULL,
17076+ user_lookups bigint NOT NULL,
17077+ user_updates bigint NOT NULL,
17078+ last_user_seek datetime NULL,
17079+ last_user_scan datetime NULL,
17080+ last_user_lookup datetime NULL,
17081+ last_user_update datetime NULL,
17082+ PRIMARY KEY CLUSTERED (object_id, index_id)
17083+ );
17084+ END;
17085+
17086+ INSERT
17087+ #usage_stats WITH (TABLOCK)
17088+ (
17089+ object_id,
17090+ index_id,
17091+ user_seeks,
17092+ user_scans,
17093+ user_lookups,
17094+ user_updates,
17095+ last_user_seek,
17096+ last_user_scan,
17097+ last_user_lookup,
17098+ last_user_update
17099+ )
17100+ SELECT
17101+ us.object_id,
17102+ us.index_id,
17103+ us.user_seeks,
17104+ us.user_scans,
17105+ us.user_lookups,
17106+ us.user_updates,
17107+ us.last_user_seek,
17108+ us.last_user_scan,
17109+ us.last_user_lookup,
17110+ us.last_user_update
17111+ FROM sys.dm_db_index_usage_stats AS us
17112+ WHERE us.database_id = @current_database_id
17113+ AND EXISTS
17114+ (
17115+ SELECT
17116+ 1/0
17117+ FROM #filtered_objects AS fo
17118+ WHERE fo.database_id = @current_database_id
17119+ AND fo.object_id = us.object_id
17120+ );
17121+
1706617122 SELECT
1706717123 @sql = N'
1706817124 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
@@ -17074,24 +17130,16 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1707417130 i.index_id,
1707517131 s.schema_id,
1707617132 schema_name = s.name,
17077- table_name = ISNULL(t .name, v.name) ,
17078- index_name = ISNULL(i.name, ISNULL(t .name, v.name) + N''.Heap''),
17133+ table_name = o .name,
17134+ index_name = ISNULL(i.name, o .name + N''.Heap''),
1707917135 column_name = c.name,
1708017136 column_id = c.column_id,
1708117137 i.is_primary_key,
1708217138 i.is_unique,
1708317139 i.is_unique_constraint,
1708417140 is_indexed_view =
1708517141 CASE
17086- WHEN EXISTS
17087- (
17088- SELECT
17089- 1/0
17090- FROM ' + QUOTENAME(@current_database_name) + N'.sys.objects AS so
17091- WHERE i.object_id = so.object_id
17092- AND so.is_ms_shipped = 0
17093- AND so.type = ''V''
17094- )
17142+ WHEN o.type = ''V''
1709517143 THEN 1
1709617144 ELSE 0
1709717145 END,
@@ -17168,12 +17216,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1716817216 THEN 0
1716917217 END
1717017218 FROM ' + QUOTENAME(@current_database_name) + N'.sys.indexes AS i
17171- LEFT JOIN ' + QUOTENAME(@current_database_name) + N'.sys.tables AS t
17172- ON i.object_id = t.object_id
17173- LEFT JOIN ' + QUOTENAME(@current_database_name) + N'.sys.views AS v
17174- ON i.object_id = v.object_id
17219+ JOIN ' + QUOTENAME(@current_database_name) + N'.sys.objects AS o
17220+ ON i.object_id = o.object_id
1717517221 JOIN ' + QUOTENAME(@current_database_name) + N'.sys.schemas AS s
17176- ON ISNULL(t .schema_id, v.schema_id) = s.schema_id
17222+ ON o .schema_id = s.schema_id
1717717223 JOIN ' + QUOTENAME(@current_database_name) + N'.sys.index_columns AS ic
1717817224 ON i.object_id = ic.object_id
1717917225 AND i.index_id = ic.index_id
@@ -17184,11 +17230,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1718417230 N'.sys.columns AS c
1718517231 ON ic.object_id = c.object_id
1718617232 AND ic.column_id = c.column_id
17187- LEFT JOIN sys.dm_db_index_usage_stats AS us
17233+ LEFT JOIN #usage_stats AS us
1718817234 ON i.object_id = us.object_id
1718917235 AND i.index_id = us.index_id
17190- AND us.database_id = @database_id
17191- WHERE (t.object_id IS NULL OR t.is_ms_shipped = 0 )
17236+ WHERE o.is_ms_shipped = 0
17237+ AND o.type IN (N''U'', N''V'' )
1719217238 AND i.type IN (1, 2)
1719317239 AND i.is_disabled = 0
1719417240 AND i.is_hypothetical = 0
@@ -17353,8 +17399,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1735317399 ps.index_id,
1735417400 s.schema_id,
1735517401 schema_name = s.name,
17356- table_name = ISNULL(t .name, v.name) ,
17357- index_name = ISNULL(i.name, ISNULL(t .name, v.name) + N''.Heap''),
17402+ table_name = o .name,
17403+ index_name = ISNULL(i.name, o .name + N''.Heap''),
1735817404 ps.partition_id,
1735917405 p.partition_number,
1736017406 total_rows = ps.row_count,
@@ -17364,20 +17410,18 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1736417410 p.data_compression_desc,
1736517411 i.data_space_id
1736617412 FROM ' + QUOTENAME(@current_database_name) + N'.sys.indexes AS i
17367- LEFT JOIN ' + QUOTENAME(@current_database_name) + N'.sys.tables AS t
17368- ON i.object_id = t.object_id
17369- LEFT JOIN ' + QUOTENAME(@current_database_name) + N'.sys.views AS v
17370- ON i.object_id = v.object_id
17413+ JOIN ' + QUOTENAME(@current_database_name) + N'.sys.objects AS o
17414+ ON i.object_id = o.object_id
1737117415 JOIN ' + QUOTENAME(@current_database_name) + N'.sys.schemas AS s
17372- ON ISNULL(t .schema_id, v.schema_id) = s.schema_id
17416+ ON o .schema_id = s.schema_id
1737317417 JOIN ' + QUOTENAME(@current_database_name) + N'.sys.partitions AS p
1737417418 ON i.object_id = p.object_id
1737517419 AND i.index_id = p.index_id
1737617420 JOIN ' + QUOTENAME(@current_database_name) + N'.sys.allocation_units AS a
1737717421 ON p.partition_id = a.container_id
1737817422 LEFT HASH JOIN ' + QUOTENAME(@current_database_name) + N'.sys.dm_db_partition_stats AS ps
1737917423 ON p.partition_id = ps.partition_id
17380- WHERE (t.object_id IS NULL OR t. type <> N''TF '')
17424+ WHERE o. type IN ( N''U'', N''V '')
1738117425 AND i.type IN (1, 2)
1738217426 AND EXISTS
1738317427 (
@@ -17406,7 +17450,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1740617450 ps.index_id,
1740717451 s.schema_id,
1740817452 s.name,
17409- ISNULL(t .name, v.name) ,
17453+ o .name,
1741017454 i.name,
1741117455 ps.partition_id,
1741217456 p.partition_number,
@@ -18120,7 +18164,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1812018164 AND NOT (ia1.is_unique = 1 AND ia2.is_unique = 0)
1812118165 WHERE ia1.consolidation_rule IS NULL /* Not already processed */
1812218166 AND ia2.consolidation_rule IS NULL /* Not already processed */
18123- /* Exclude unique constraints - we'll handle those separately in Rule 7 */
18167+ /* Don't disable unique constraints — but allow them as the wider (target) index */
1812418168 AND NOT EXISTS
1812518169 (
1812618170 SELECT
@@ -18129,14 +18173,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1812918173 WHERE id1_uc.index_hash = ia1.index_hash
1813018174 AND id1_uc.is_unique_constraint = 1
1813118175 )
18132- AND NOT EXISTS
18133- (
18134- SELECT
18135- 1/0
18136- FROM #index_details AS id2_uc
18137- WHERE id2_uc.index_hash = ia2.index_hash
18138- AND id2_uc.is_unique_constraint = 1
18139- )
1814018176 AND EXISTS
1814118177 (
1814218178 SELECT
0 commit comments