在数据库中存在销售单据明细表,其建表语句为: CREATE TABLE销售单据明细表( 销售单据编号varchar(8), 商品编号varchar(8), 单价real, 数量int, 总价real ); 为了保持数据一致性,此表中存在符合业务要求的触发器

admin2017-06-27  23

问题 在数据库中存在销售单据明细表,其建表语句为:
CREATE TABLE销售单据明细表(
销售单据编号varchar(8),
商品编号varchar(8),
单价real,
数量int,
总价real
);
为了保持数据一致性,此表中存在符合业务要求的触发器:
CREATE TRIGGER AutoCountSum
ON销售单据明细表FOR INSERT,UPDATE
AS
DECLARE@UnitPrice real,@Quantity int,@Amount real
SELECT@UnitPrice=单价,@Quantity=数量FROM inserted
SET@Amount=@UnitPrice*@Quantity
UPDATE销售单据明细表SET总价=@Amount
WHERE销售单据编号IN(SELECT销售单据编号FROM inserted)
AND商品编号IN(SELECT商品编号FROM inserted)
在系统运行一段时间后,此表中有近千万条数据,此时发现对此表以“销售单据编号”和“商品编号”为条件,对其他字段进行修改时操作速度很慢。请分析原因,并在不改变硬件和SQL语句的前提下,给出优化方法。
在解决了①中的问题系统平稳运行3年后,用户反映系统速度很慢,管理员考虑更换硬件。
经过一段时间的监控,系统资源使用情况如下:
CPU使用率一般不超过70%
内存使用率95%
磁盘IO使用率高峰期90%—95%,主要为读操作
请根据以上数据,说明在此次更换硬件过程中,应该着重提高哪方面硬件性能,并给出原因。

选项

答案(1)对字段修改时操作速度很慢的原因是大量数据的查询速度慢,从而引起修改慢。优化的方法是在“销售单据编号”和“商品编号”上建立索引。 (2)更换硬件时应该提高内存容量,磁盘在经济条件许可的条件下才有RAID10磁盘阵列。

解析 (1)索引技术是一种快速数据访问技术,建立索引的目的就是为了提高查询的效率。查询的性能在很大程度上取决于存在什么样的索引来加快选择和联接的处理。对于大量数据,只有快速的定位、减少查询的时间就会增加修改的速度。
(2)对于CPU、内存、磁盘等硬件设备在空闲时使用率超过90%,说明硬件资源匮乏。如果在高峰时使用率小于90%说明硬件资源充足。本题中,内存和磁盘的使用率都高于90%,而CPU的使用率不高于70%,说明内存、硬盘的资源匮乏,需要调整,而CPU的资源充足不需要调整。因此在硬件调整时,应提高内存的容量和硬盘的访问效率。
使用RAID时,可以将基本表和建立在表上的索引分别放在不同的磁盘上,这样访问基本表时,存放数据和存放索引的磁盘驱动器并行工作,可以得到较快的文件读写速度;类似的,日志文件与数据对象(表、索引等)也可分别存放在不同磁盘上以改善系统的I/O性能。在RAID中,RAID10是一个RAID0与RAID1的组合体,它继承了RAID0的快速和RAID1的安全,同时读写速度均提高。
转载请注明原文地址:https://jikaoti.com/ti/Cq37FFFM
0

最新回复(0)