我目前正在阅读一本书,使用 Microsoft SQL Server 2012,第三版交付商业智能。在本书中,它有一个部分说明了以下内容:
数据集市的特点
因为数据集市旨在用作商业智能的来源,而不是管理组织的日常事务,所以它的设计与 OLTP 数据库不同。数据集市不是围绕规范化规则构建的,而是为了访问速度而构建的。数据集市仍然是一个关系数据库,但它的设计目的是在输出数据以进行分析和报告时需要更少的表连接。在数据集市中,为了速度,可以重复数据(非规范化)。
在设计数据集市时,规范化规则被围绕“事实”组织的不同设计方法所取代。这些新的设计方法被称为星星和雪花。我们在“星形模式”和“雪花模式”部分讨论星形和雪花。星星和雪花可能看起来像是孩子们的幻想,但实际上,它们提供了相当成熟和脚踏实地的方法来创建快速且易于访问的信息。
多么棒的信息啊!但这就是混乱开始的地方。我知道 SQL Server 允许使用存储过程作为优化查询性能的一种方式。虽然我不知道这些的内部工作原理,但我知道服务器具有优化查询性能的内置方法,可以在传统的规范化数据库中快速运行查询。例如,假设我有一个 Sales 表,其中列出了 20,000 行,这些行都是已售出的单个产品。如果我想知道这些行的总和,我可能会将查询保存SELECT SUM(SALES.SALESPRICE) FROM SALES
在存储过程中。
如果我知道存储过程是预编译的,那么服务器不会自动知道它必须在每次插入完成时获取这个总和并缓存查询结果吗?那么,每当添加第 20,001 行时,就会自动保存销售金额,因此上述存储过程的结果立即可用?这不就是执行计划背后的全部想法吗?还是我完全错过了“优化”查询的功能?
如果不是这种情况,我将不胜感激了解存储过程的内部工作原理,以及与从 SQL Server Management Studio (SSMS) 进行直接查询相比,它如何产生性能优势
谢谢!!!!