设某商品经营管理系统使用SQL Server 2000数据库管理系统。在数据库中存在销售明细表,其建表语句为:
CREATE TABLE销售明细表(
销售单据编号varchar(8),
商品编号varchar(8)
单价money,
数量int,
总价money
)
为了保证数据的一致性,建有如下触发器:
CREATE TRIGGER AutoCountSum
ON 销售明细表 FOR INSERT, UPDATE
AS
DECLARE @UnitPrice money, @Quantity int
DECLARE @Amount money
SELECT @UnitPrice=单价,@Quantity=数量
FROM inserted
SET @Amount=@UnitPrice[*]@Quantity
UPDATE销售明细表SET总价=@Amount
WHERE销售单据编号IN(SELECT销售单据编号FROM inserted)
AND商品编号IN(SELECT商品编号FROM inserted)
1.设系统运行一段时间后此表中有近一百万条记录,此时发现对该表的插入操作速度很慢,请分析插入速度慢的原因。在不改变数据库服务器硬件和表结构、不清理数据的情况下,请说明应如何优化此表的插入操作。
参考答案:建立视图:
creat view s(商品编号,总价)
as
select商品编号,sum(总价)from 销售明细表
where单价>50
group by商品编号
在视图上建立索引
creat unique index商品编号on s(商品编号,总价)
解析: 视图是从一个或几个基本表上(或视图)上导出的表,是一个虚表,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍然存放在原来的基本表上,所以基本表中的数据发送变化,从视图中查询出的数据也随之改变。
定义基本表时,为了减少数据的冗余性,表中只存放基本数据,而对基本数据计算后派生出来的数据基本表中不存储,但是由于视图中的数据不是实际数据,所以定义视图时可以根据应用的需要,派生一些基本列,即虚列。带虚拟列的视图也成为带表达式的视图。
建立索引是加快查询速度的有效手段,对应经常查询的数据,可在其列上建立索引。
根据视图和索引的特点,可在基本表上建立视图s,然后在视图”商品编号,和总价类”建立索引,即可提高查询效率,而且当基本表发生改变时也不影响查询效果。