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

admin2018-06-19  29

问题 某商场商品经营管理系统使用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 UNIQIJE CLIJSTERED INDEX ix_商品销售额
ON商品销售额视图(商品号);
此商场的销售量很大,每天有大量数据插入到销售明细表中。请从数据库整体性能角度分析,此技术人员提出的优化方法是否合适,并给出原因。

选项

答案不合适,每天大量的插入操作使得在修改表的同时也要对视图进行修改,增加了系统的负担,然而该统计功能一个月才用一次,这样导致系统的利用率也较为低下。

解析 由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。而用户通过视图对数据进行增加、删除、修改时,有意或无意地对不属于视图范围内的基本表数据进行操作,会破坏数据的一致性。而且视图中的数据本身就是冗余的,每次对表进行修改时,同时也要对相应的视图进行修改,这大大增加了系统的负担。
转载请注明原文地址:https://jikaoti.com/ti/wS37FFFM
0

最新回复(0)