某商品经营管理系统使用SQL Server数据库。在数据库中存在销售单据表,建表语句为: CREATE TABLE销售单据表( 销售单据编号 char(20), 付款总金额 money, 销售日期 datetime, 销售人员

admin2020-05-25  570

问题 某商品经营管理系统使用SQL Server数据库。在数据库中存在销售单据表,建表语句为:
CREATE TABLE销售单据表(
销售单据编号    char(20),
付款总金额      money,
销售日期        datetime,
销售人员编号    varchar(8),
收银台编号      varchar(6)
);
由于该表数据量巨大,因此建立了销售单据历史表,将1年以前的数据从销售单据表转入销售单据历史表。销售单据历史表的建表语句如下:
CREATE TABLE销售单据历史表(
销售单据编号    char(20),
付款总金额      money,
销售日期        datetime,
销售人员编号    varchar(8),
收银台编号      varchar(6)
);
其中销售单据编号为主键,在收银台编号和销售人员编号上有索引。
在系统运行一段时间后,发现如下语句执行速度缓慢:
SELECT销售单据编号,付款总金额,销售日期FROM销售单据表WHERE收银台编号=001000
union
SELECT销售单据编号,付款总金额,销售日期FROM销售单据历史表WHERE收银台编号=001000
请给出该语句执行速度缓慢的原因,并给出SQL语句的优化方案。

选项

答案在执行完Union语句后,需要对表中数据逐个查询,该表数据量较大,所以执行速度缓慢。 SQL语句的优化方案: SELECT销售单据编号,付款总金额,销售日期FROM销售单据表WHERE收银台编号=001000 Union All SELECT销售单据编号,付款总金额,销售日期FROM销售单据历史表WHERE收银台编号=001000 这个执行效率较高。在执行完Union语句后,执行all语句,根据由销售日期和销售人员编号建立的索引,直接查询,故效率较高。

解析 并运算可将两个或多个查询语句的结果集合并为一个结果集,这个运算可以使用UNION运算符直接实现。UNION是一个特殊的运算符,通过它可以实现让两个或更多的查询产生单一的结果集。
使用UNION谓词的语法格式为:
SELECT语句1
UNION[ALL]
SELECT语句2
UNION[ALL]
SELECT语句n
其中:ALL表示在结果集中包含所有查询语句产生的全部记录,包括重复的记录。如果没有指定ALL,则系统默认是删除合并后结果集中的重复记录。UNION和UNION ALL的区别是:UNION会自动压缩多个结果集合中的重复结果,而UNION ALL则将所有的结果全部显示出来。
转载请注明原文地址:https://kaotiyun.com/show/CzID777K
0

相关试题推荐
最新回复(0)