sql 表分区信息查看

复制代码
代码
create procedure [dbo].[sp_show_partition_range]
(
   
@partition_table    nvarchar(255= null
  ,
@partition_function nvarchar(255= null
)
as
begin
   
set nocount on

   
declare @function_id int
       
set @function_id = null

   
-- get @function_id base on @partition_table
   if len(@partition_table> 0 begin
      
select @function_id = s.function_id
        
from sys.indexes i
                
inner join sys.partition_schemes s
          
on i.data_space_id = s.data_space_id
       
where i.index_id < 2
         
and i.object_id = object_id(@partition_table)
         
      
if @function_id is null
         
return 1         
   
end

   
-- get @function_id base on @partition_function
   if len(@partition_function> 0 begin
      
select @function_id = function_id
        
from sys.partition_functions
       
where name = @partition_function
       
      
if @function_id is null
         
return 1        
    
end
   

   
-- get partition range
   select partition_function = f.name
         ,t.partition
         ,t.minval
         ,value 
= case when f.boundary_value_on_right=1 then '<= val <' else '< val <=' end
         ,t.maxval
     
from (
           
select h.function_id
                 ,partition 
= h.boundary_id
                 ,minval    
= l.value
                 ,maxval    
= h.value
             
from sys.partition_range_values h
                     
left join sys.partition_range_values l
               
on h.function_id = l.function_id and h.boundary_id = l.boundary_id + 1

           
union all

           
select function_id
                 ,partition 
= max(boundary_id) + 1
                 ,minval    
= max(value)
                 ,maxval    
= null
             
from sys.partition_range_values
            
group by function_id
          ) t
              
inner join sys.partition_functions f
         
on t.function_id = f.function_id
      
where f.function_id = @function_id
         
or @function_id is null
      
order by 12
end
复制代码

 

  查看分区区间:
     sp_show_partition_range  'SO_Tb_Ps'  --表名
  
查看表分区数据分布情况

 

复制代码
代码
 select 分区编号 = $partition.PF_SO(OrderDate)
      ,行数      
= count(*)
      ,最小值    
= min(OrderDate)
      ,最大值    
= max(OrderDate)
  
from dbo.SO
 
group by $partition.PF_SO(OrderDate)
 
order by 1
 
--PF_SO为表分区函数
复制代码


posted @   zping  阅读(4311)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示