某商场商品经营管理系统使用SQL Server 2008数据库管理系统,此系统上线运行1年后,业务人员使用某统计功能(此功能每月使用一次)时发现速度很慢。该统计功能主要执行的SQL语句如下: SELECT商品号,SUM(销售数量*销售价格)销售额

admin2020-05-25  200

问题 某商场商品经营管理系统使用SQL Server 2008数据库管理系统,此系统上线运行1年后,业务人员使用某统计功能(此功能每月使用一次)时发现速度很慢。该统计功能主要执行的SQL语句如下:
  SELECT商品号,SUM(销售数量*销售价格)销售额
    FROM销售明细
    GROUP BY商品号;
  该销售明细表的建表语句如下:
  CREATE TABLE销售明细(
  序列号int    IDENTITY(1,1)NOT NULL,
  商品号int    NOT、NULL,
  销售日期datetime NULL,
  销售数量int    NOT NULL,
  销售价格int    NOT NULL
);
并在销售明细表上建有如下索引:
CREATE index ix_销售明细_商品号on销售明细(商品号);
某技术人员提出通过执行下述语句以提高此查询的运行效率:
CREATE VIEW商品销售额视图
  WITH SCHEMABINDING
  AS
    SELECT商品号,SUM(销售数量*销售价格)销售额,
    COUNT_BIG(*)cnt
    FROM dbo.销售明细
    GROUP BY商品号;
CREATE UNIQUE CLUSTERED INDEX iX_商品销售额
ON商品销售额视图(商品号);
请分析该技术人员给出的语句功能以及对原有查询语句的性能影响,并给出原因。

选项

答案语句功能:建立包含所关心数据(商品号,销售额,该商品号在表中出现的次数)的带索引的视图,并建立按商品号对应销售额UNIQUE聚簇排序的索引,从而大大缩小了查询语句的查询范围,提高了查询效率。原因:视图中将间接相关的属性列(序列号,销售日期,商品号,销售数量,销售价格)转换成了目标属性列,减少了搜索空间,同时建立UNIQUE CLUSTERED索引,使查询商品号的数据记录唯一,因此降低了搜索范围,提高了搜索效率。

解析 该技术人员使用了带有索引的视图,将所关心的数据(商品号,销售额,该商品号在表中出现的次数)从销售明细表中提取出来建立视图,并对该视图建立按商品号排序的聚簇索引,这样大大减少了在搜索不同商品的销售额时调用的数据表的规模,从而提高了查询效率。由于表的数据规模很大,建立该视图后,同一种商品不会多次出现在表中,而是通过一个计数变量cnt表示,即在检索时大大减少了检索规模。创建索引时,UNIQUE关键字表明此索引的每一个索引值只对应唯一的数据记录。CLUSTER表示要建立的索引是聚簇索引(所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织)。
转载请注明原文地址:https://jikaoti.com/ti/qTkiFFFM
0

最新回复(0)