SQL窗体函數一例

SQL窗体函數一例

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

需求:

         MSSQL,列出服務實例中全部數據庫的例如以下信息: 數據庫ID、數據庫名、創建日期、數據文件類型、數據文件大小、數據庫總大小、文件所在路徑。

寫法(後面的百分比為所花時間占比):

-- 连接子查询  (47%)
WITH cte_TotalSize AS
(
	SELECT database_id
	      ,CAST(SUM(size) AS FLOAT)/128 AS [TotalSize(MB)]
	FROM sys.master_files
	GROUP BY database_id
)
SELECT a.database_id AS [DB_ID]
      ,b.name AS [DB_Name]
      ,b.create_date
      ,CASE a.type WHEN 1 THEN 'Log' ELSE 'Data' END AS File_Type
      ,CAST(a.size AS FLOAT)/128 AS [Size(MB)]  -- Size以页(8 KB)为单位
      ,c.[TotalSize(MB)]
      ,a.physical_Name AS File_Path
FROM sys.master_files a
INNER JOIN sys.databases b ON a.database_id = b.database_id
INNER JOIN cte_TotalSize c ON a.database_id = c.database_id


-- 标量子查询  (34%)
SELECT a.database_id AS [DB_ID]
      ,b.name AS [DB_Name]
      ,b.create_date
      ,CASE a.type WHEN 1 THEN 'Log' ELSE 'Data' END AS File_Type
      ,CAST(a.size AS FLOAT)/128 AS [Size(MB)]  -- Size以页(8 KB)为单位
      ,(SELECT CAST(SUM(size) AS FLOAT)/128 FROM sys.master_files WHERE database_id = a.database_id) AS [TotalSize(MB)]
      ,a.physical_Name AS File_Path 
FROM sys.master_files a
INNER JOIN sys.databases b ON a.database_id = b.database_id


-- 窗体函数  (19%)
SELECT a.database_id AS [DB_ID]
      ,b.name AS [DB_Name]
      ,b.create_date
      ,CASE a.type WHEN 1 THEN 'Log' ELSE 'Data' END AS File_Type
      ,CAST(a.size AS FLOAT)/128 AS [Size(MB)]  -- Size以页(8 KB)为单位
      ,CAST(SUM(size) OVER(PARTITION BY a.database_id) AS FLOAT)/128 AS [TotalSize(MB)]
      ,a.physical_Name AS File_Path 
FROM sys.master_files a
INNER JOIN sys.databases b ON a.database_id = b.database_id

結果:

SQL窗体函數一例

均得出正確結果的上面三種方法,代碼越來越少,性能卻越來越好。。

当中第三種是使用了窗体函數,相關文檔:http://msdn.microsoft.com/zh-cn/library/ms189461.aspx

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118350.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • elasticsearch部署方案_elasticsearch安装配置

    elasticsearch部署方案_elasticsearch安装配置除非您使用Elasticsearch进行开发和测试,否则创建和维护Elasticsearch集群将是一项会占用您大量时间的任务。Elasticsearch是一个极其强大的搜索和分析引擎,其强大的部分在于能够对其进行扩展以获得更好的性能和稳定性。本教程将提供有关如何设置Elasticsearch集群的一些信息,并将添加一些操作技巧和最佳实践来帮助您入门。但应该强调的是,每个Elasticsearch设置可能会因多种因素而异,包括服务器上的工作负载、索引数据量、硬件规格,甚至操作员的经验。什么

    2022年10月10日
    0
  • db4o的使用

    db4o的使用from:http://www.ibm.com/developerworks/cn/java/j-lo-db4o2/index.html前言在 db4o之旅 系列文章的第一部分:初识db4o 中,作者介绍了db4o的历史和现状,应用领域,以及和ORM等的比较。在这篇文章中,作者将会介绍db4o的安装、启动以及三种不同的查询方式:QBE(QuerybyEx

    2022年7月21日
    18
  • 爬虫实战| 1宅男女神(秀人网专区)—让人心情愉悦的图片爬取 ![通俗易懂]

    爬虫实战| 1宅男女神(秀人网专区)—让人心情愉悦的图片爬取 ![通俗易懂]目标是宅男女神的美女图片板块下的秀人板块,页面上全部是该网站收录的美女图片分类,大概浏览了一下,发现各个杂志社的图片(妹子)质量最高,其中以秀人为首,所以决定爬取所有秀人板块下的图片.目标网页截图该网页这里显示只有5页,后面的页面在点击下一页后出现.为了过审还是打码了,本来都是穿着衣服的正经妹妹,兄弟们可别误会了~首先利用Chrome抓包第一步先利用抓包工具来判断我们要爬取的网站是动态数据还是静态数据.这里可以清楚的看到,当我们发起请求之后,所有我们需要的东西都已经加载

    2022年6月2日
    73
  • python常用库安装

    python常用库安装python常用库安装

    2022年4月24日
    154
  • upload通关手册

    uploadlabs通关0x00前言这段时间一直在忙,没时间来更新文章,这里就写篇uploadlabs的通关手册吧,现在包括网上也有很多upload通关手册,但是在这里还是想自己去写一篇,来

    2021年12月11日
    47
  • oracle中拼接字符串_oracle 连接字符串

    oracle中拼接字符串_oracle 连接字符串1.listagg   该方法拼接后是varchar2类型,有最大长度限制,在OracleDatabase中,VARCHAR2字段类型,最大值为4000;PL/SQL中VARCHAR2变量类型,最大字节长度为32767。   适用场景:当要拼接的字符较少时使用。select’select’||col||’from’||table_name||’;’…

    2022年9月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号