我已经创建了一个脚本来搜索候选表以进行分区,并且使用索引信息,我想找到要分区的理想列。我忽略了(目前)最常查询的列。我在下面有一个基本查询,它优先考虑属于聚簇索引的列,然后确定它们是否是主键。
因此,使用这种公认的粗略方法,这是索引列的最佳标准/质量,我还可以包括它来确定它们是否是好的分区列?如果您也可以为这些属性提供推理。
如果您完全不同意这种方法,那么请注释,但请记住,这是在深入研究最佳实践之前对分区结果进行初步分析。
;WITH cte AS
(
SELECT
t.name AS TableName, ind.name AS IndexName,
ind.type_desc AS TypeDesc, col.name AS ColumnName,
st.name AS DataType, ind.is_unique AS IsUnique,
ind.is_primary_key AS IsPrimaryKey,
ind.is_unique_constraint AS IsUniqueCons,
ROW_NUMBER() OVER (PARTITION BY t.name
ORDER BY
CASE WHEN ind.type_desc = 'CLUSTERED' THEN 1 ELSE 2 END,
CASE WHEN ind.is_primary_key = 1 THEN 1 ELSE 2 END) AS row_num
FROM
sys.indexes ind
INNER JOIN
sys.index_columns ic ON ind.object_id = ic.object_id
AND ind.index_id = ic.index_id
INNER JOIN
sys.columns col ON ic.object_id = col.object_id
AND ic.column_id = col.column_id
INNER JOIN
sys.tables t ON ind.object_id = t.object_id
INNER JOIN
sys.types st ON col.system_type_id = st.system_type_id
WHERE
t.is_ms_shipped = 0
AND st.name IN ('datetime', 'smalldatetime')
)
SELECT *
FROM cte
WHERE row_num = 1
答案 0 :(得分:0)
您无法仅从架构中检测到好的分区列。它主要取决于工作量。
分区不使查询更快。它可以做到这一点,但它通常不如正常的索引。大多数情况下,分区会使查询变慢。查询必须符合分区方案。
分区是指能够在固定时间内删除和添加分区,并将不同的数据放到不同的存储上(不同的吞吐量和不同的备份时间表)。
我认为你的方法永远不会奏效。你需要扔掉它。