学校时的分布式数据库读书笔记(5)

本文介绍了分布式数据库系统的查询处理和优化技术,涵盖了连接运算的基础概念、多种连接类型及其应用场景,包括等值连接、自然连接、不等连接、内连接、外连接等,并探讨了查询优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三章 分布式数据库的查询处理和优化

1 基本概念

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
   
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

   
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

SQL-92
标准所定义的FROM子句的连接语法格式为:

FROM join_table join_type join_table
[ON (join_condition)]
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。 join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比 较运算符进行表间某()列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。

外连接分为左外连接(LEFT OUTER JOINLEFT JOIN)、右外连接(RIGHT OUTER JOINRIGHT JOIN) 和全外连接(FULL OUTER JOINFULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 数据行。交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

   
无论哪种连接都不能对textntextimage数据类型列进行直接连接。

下面就是交叉连接:

INPUT:

SELECT * FROM TABLE1

OUTPUT:

ROW       REMARKS

========== =======

row 1         Table 1

row 2         Table 1

row 3          Table 1

row 4         Table 1

 

INPUT:

SELECT * FROM TABLE2

OUTPUT:

ROW        REMARKS

========== ========

row 1           table 2

row 2          table 2

row 3           table 2

row 4          table 2

 

To join these two tables, type this:

INPUT:

SELECT * FROM TABLE1,TABLE2

OUTPUT:

ROW       REMARKS   ROW      REMARKS

========== ========== ========== ========

row 1               Table 1    row 1      table 2

row 1               Table 1    row 2      table 2

row 1               Table 1    row 3      table 2

row 1               Table 1    row 4      table 2

row 2                Table 1    row 1      table 2

row 2               Table 1    row 2      table 2

row 2               Table 1    row 3      table 2

row 2               Table 1    row 4      table 2

row 3               Table 1    row 1      table 2

row 3               Table 1    row 2      table 2

row 3               Table 1    row 3      table 2

row 3               Table 1    row 4      table 2

row 4               Table 1    row 1      table 2

row 4               Table 1    row 2      table 2

row 4               Table 1    row 3      table 2

row 4               Table 1    row 4      table 2

2 各种连接查询实例

基本表:

(1)CUSTOMER

INPUT:

SELECT * FROM CUSTOMER

OUTPUT:

NAME       ADDRESS    STATE  ZIP        PHONE       REMARKS
========== ========== ====== ========== ========= ==========
TRUE WHEEL 55O HUSKER NE     58702      555-4545    NONE
BIKE SPEC  CPT SHRIVE LA     45678      555-1234    NONE
LE SHOPPE  HOMETOWN   KS     54678      555-1278    NONE
AAA BIKE   10 OLDTOWN NE     56784      555-3421    JOHN-MGR
JACKS BIKE 24 EGLIN   FL     34567      555-2314    NONE

(2) PART

INPUT:

SELECT * FROM PART

OUTPUT:

    PARTNUM DESCRIPTION                PRICE
=========== ==================== ===========
         54 PEDALS                     54.25
         42 SEATS                      24.50
         46 TIRES                      15.25
         23 MOUNTAIN BIKE             350.45
         76 ROAD BIKE                 530.00
         10 TANDEM                   1200.00

(3) ORDERINFO

INPUT:

         SELECT * FROM ORDERINFO

OUTPUT:

  ORDEREDON NAME           PARTNUM    QUANTITY REMARKS
=========== ========== =========== =========== =======
15-MAY-1996 TRUE WHEEL          23           6 PAID
19-MAY-1996 TRUE WHEEL          76           3 PAID
 2-SEP-1996 TRUE WHEEL          10           1 PAID
30-JUN-1996 TRUE WHEEL          42           8 PAID
30-JUN-1996 BIKE SPEC           54          10 PAID
30-MAY-1996 BIKE SPEC           10           2 PAID
30-MAY-1996 BIKE SPEC           23           8 PAID
17-JAN-1996 BIKE SPEC           76          11 PAID
17-JAN-1996 LE SHOPPE           76           5 PAID
 1-JUN-1996 LE SHOPPE           10           3 PAID
 1-JUN-1996 AAA BIKE            10           1 PAID
 1-JUL-1996 AAA BIKE            76           4 PAID
 1-JUL-1996 AAA BIKE            46          14 PAID
11-JUL-1996 JACKS BIKE          76          14 PAID

2.1 交叉连接

SELECT  O.ORDEREDON, O.NAME, O.PARTNUM, P.PARTNUM, P.DESCRIPTION

FROM ORDERINFO O, PART P

结果如图3.1,可见结果与交叉连接相同。结果为8414*6)行。

3.1

2.2 等值连接

SELECT  O.ORDEREDON, O.NAME, O.PARTNUM, P.PARTNUM, P.DESCRIPTION

FROM ORDERS O, PART P

WHERE O.PARTNUM = P.PARTNUM

结果如图3.2

3.2

自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 结果集合中所包括的列,并删除连接表中的重复列。

2.3 不等值连接

SELECT O.NAME, O.PARTNUM, P.PARTNUM, O.QUANTITY * P.PRICE TOTAL

FROM ORDERS O, PART P

WHERE O.PARTNUM > P.PARTNUM

2.4 内连接

SELECT P.PARTNUM, P.DESCRIPTION,P.PRICE,O.NAME, O.PARTNUM

FROM PART P

JOIN ORDERINFO O ON O.PARTNUM = 54

如图3.3

3.3

2.5 右连接

SELECT P.PARTNUM, P.DESCRIPTION,P.PRICE,O.NAME, O.PARTNUM

FROM PART P

RIGHT OUTER JOIN ORDERINFO O ON O.PARTNUM = 54

如图3.4,右连接补全右表

3.4

2.6 左连接

SELECT P.PARTNUM, P.DESCRIPTION,P.PRICE,

O.NAME, O.PARTNUM

FROM PART P

LEFT OUTER JOIN ORDERINFO O ON O.PARTNUM = 10

3.5,左边补全。

3.5

2.7 自连接

INPUT:

SELECT * FROM TABLE1, TABLE1

OUTPUT:

ROW        REMARKS    ROW        REMARKS
========== ========== ========== ========
row 1      Table 1    row 1      Table 1
row 1      Table 1    row 2      Table 1
row 1      Table 1    row 3      Table 1
row 1      Table 1    row 4      Table 1
row 2      Table 1    row 1      Table 1
row 2      Table 1    row 2      Table 1
row 2      Table 1    row 3      Table 1
row 2      Table 1    row 4      Table 1
row 3      Table 1    row 1      Table 1
row 3      Table 1    row 2      Table 1
row 3      Table 1    row 3      Table 1
row 3      Table 1    row 4      Table 1
row 4      Table 1    row 1      Table 1
row 4      Table 1    row 2      Table 1
...

自连接的上述写法在实际应用中不一定能。比如微软SQLSERVER有其自身的规定,详见帮助文档。上述写法在其中是不可以的。

2.8 半连接

SELECT P.PARTNUM, P.DESCRIPTION,P.PRICE,O.NAME

FROM PART P

JOIN ORDERINFO O ON O.PARTNUM = 54

如图3.6

3.6

3 查询处理和优化

3.1 基于关系代数等价变换的优化算法

一般策略:

    

    1.选择、投影运算应尽可能先做,以减少中间结果

    2.在执行连接前对数据库数据做适当的预处理,如排序、索引等以减少扫描次数,提高连接速度

    3. 同时执行一串投影、选择操作,且尽可能与其前后的双目运算结合起来,以避免重复扫描关系和减少中间数据

4. 找出公共子表达式等

3.2 基于半连接/直接连算法的查询优化     

采用半连接对连接操作的查询优化,其目的是减少(降低)通讯量,但会导致通讯次数的增加和本地处理时间的增加。

    若传输费用是主要的,则采用半连接方案。

    若局部处理费用是主要的,则采用直接连接方案。

 

 

 

四种处理直接连接查询优化算法

     1) 利用站点依赖信息的算法

     2) 分片和复制算法

     3) 站点依赖和数据复制结合

4Hash划分算法

3.3 Bloom Filter

压缩方式:为了减小通讯开销,数据必须经压缩后再发送。目前Bloom Filter是最常见的压缩方式。Bloom Filter是一种基于哈希的数据结构,它能够提取出一个较小集合中的内容信息,并以较高的成功率进行匹配。如果两个结点上的倒排表需要求交,结点A 可以压缩其倒排表并发送Bloom Filter到另一个结点B。结点Bbloom filter与其上存储的倒排表求交,再将结果压缩并返回A。结点A就可以对结果进行整理后返回给用户。[19]

4 小结

本章主要讲解了分布式的查询优化。缺泛分布式数据库系统,对其中的内容可以理解,不太容易验证。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值