sql-server - 查找 pk 为 int(不是 bigint)的最大表
问题描述
我想找到行数最多的表,并排除带有 bigint 主键的表。
下面的查询运行得非常快并且似乎可以工作,但是如何修改它以过滤掉 bigint 表?我也许可以忽略大于 MAX_INT 的 row_counts,但如果表是 bigint 但还没有很多行,这将不起作用。
SELECT SCHEMA_NAME(O.schema_id) + '.' +
O.Name As [Schema.TableName], SUM(P.rows) AS 'Total_RowCount'
FROM sys.objects O
INNER JOIN sys.partitions P ON O.object_id = P.object_id
WHERE O.type = 'U'
AND P.index_id<2
GROUP BY O.schema_id, O.Name
order by Total_RowCount desc
解决方案
您可以使用 a NOT EXISTS
in 并对主键列的对象进行WHERE
横向连接。sys.types
我假设一个 PK 是由多列组成的,其中一个是bigint
你想省略的:
SELECT SCHEMA_NAME(o.schema_id) + '.' + o.name AS [Schema.TableName],
SUM(p.rows) AS Total_RowCount
FROM sys.objects o
INNER JOIN sys.partitions p ON o.object_id = p.object_id
WHERE o.type = 'U'
AND p.index_id < 2
AND NOT EXISTS (SELECT 1
FROM sys.indexes i
JOIN sys.index_columns ic ON o.object_id = ic.object_id
AND i.index_id = ic.index_id
JOIN sys.columns c ON o.object_id = c.object_id
AND ic.column_id = c.column_id
JOIN sys.types ct ON c.system_type_id = ct.system_type_id
WHERE o.object_id = i.object_id
AND i.is_primary_key = 1
AND ct.[name] = 'bigint')
GROUP BY o.schema_id,
o.name
ORDER BY Total_RowCount DESC;
推荐阅读
- c# - EntityFramework 中的递归查询抛出 NotSupportedException
- typescript - 路由控制器框架中的 passport.authenticate()
- sql-server - 为 AlwaysON AG 创建 WSFC
- asp.net-core - 使用 App Metrics 和 Influxdb 监控 kubernetes 中的 aspnet 核心 Web 应用程序不起作用
- google-maps - 如何在反应原生地图中添加粘性组件?
- mysql - Concat 使用两个不同的表
- java - 渲染由三角形组成的立方体会在旋转时产生奇怪的角度
- mysql - MySQL 查询:如何在 Django 中编写?
- scala - 如何将参数传递给scala中的方法
- prometheus - Prometheus Docker 无法以`Template: (dynamic): parse: template: :10: undefined variable "$labels"` 开始