Relation Databases Index Design and the Optimizers翻译

本文探讨了SQL处理的基本原理,重点介绍了查询优化器如何选择最佳的数据存取路径,以及索引设计如何影响这一过程。文章详细解释了predicates(搜索参数)、索引片段、匹配字段和筛选字段的概念。

第三章 SQL处理

介绍

我们现在已经对表和索引的结构有一些了解了;我们也理解和缓冲池,磁盘,磁盘服务器相关的一些对象,还有这些东西怎么让数据通过SQL能够读取。我们现在该看一下SQL本身是如何处理的。和以前一样,很多东西取决与单个关系数据库如何处理SQL;有很多相似之处,但是也有很多的不同。我们会先大概描述底层是怎么处理的,这样避免把数据库具体的东西和基本概念搞混了。合适的时候我们会将数据库具体细节。很多处理的细节在整本书里面都会不断的提到,要等到合适的时候。请记住,书末尾的词汇表总结了这章中使用的术语。
PREDICATES

一个WHERE子句包括一个或者多个predicates(搜索参数),下面展示了三个简单的predicates
SQL 3.1
WHERE SEX = ‘M’
AND
(WEIGHT > 90
OR
HEIGHT > 190)

  • SEX = ‘M’
  • WEIGHT > 90
  • HEIGHT > 190
他们也可以被看成是两个符合predicates
  • WEIGHT > 90 OR HEIGHT > 190
  • SEX = ‘M’ AND (WEIGHT > 90 OR HEIGHT > 190)

Predicates是索引设计的主要出发点,如果一个索引支持selec语句中所有的predicates,那么查询优化器很可能构建一条有效的数据获取路径。

注释

在Chris Date的n本书里面,他很不想使用predicates这个术语,我们还是按照传统数据库术语,在这里把conditions称为predicates。严格来讲,这样用是不对的,更准确的术语是条件表达式或者真值表达式。

查询优化器和数据存取路劲

关系数据库的一个长期保持的优点是,数据通常都是按照他应该被存取的方式进行存取的。如何存取的决策是由一个叫做查询优化器的组件进行的。不同的数据库系统,查询优化器各不相同,而且未来还是一样保持不同。但是他们都是通过数据库系统收集的统计信息,尽可能有效的存取数据。当然查询优化器是SQL处理的核心,也是本书的核心。在sql语句被执行之前,查询优化器必须判断应该如何存取数据;如果可能的话,应该使用哪一个索引,是不是应该使用辅助随机读,还有其他一堆事情。所有的这些信息都体现在存取路径上。例如我们在章节2用过的,这里展示在图3.1中的,存取路径定义了一个,如何对一部分索引进行扫描,还有接下来如何从需要的表页中读取。


索引片段和匹配字段
按照图3.1所示,一小片段的索引会被按顺序扫描,然后对于值在100到110之间的索引行,使用同步读,相应的行会被从表里面读出来,除非这些页已经在缓冲池里面。存取路径的成本取决与索引片段的大小。这取决于predicate所描述的范围。 越大的索引片段,需要顺序读取的索引页就越多,就有越多的索引行被处理。但是成本真正增加的地方来自于对表的同步读次数,大概10ms每个表页。类似的,越小的索引片段会减小索引读取成本,但是主要的性能节约来自于对表页更少的同步读次数。 所以索引片段的大小非常重要。不是所有的关系数据库都使用索引片段这个术语,他们都使用自己的术语,但是我们认为索引片段更能描述的清楚这个情况,我们在各种数据库都能这么用。另一种描述索引片段的方式是定义匹配字段的数量,在我们的例子中,我们只有一个匹配的字段 ,这个匹配字段定义了我们索引片段的厚度,如果我们有第二个匹配字段,同时在索引和where子句中,两个字段一起可以定义一个更小的索引片段。更少的索引处理往往导致的表页同步读也更少,这个导致的结果更重要。

索引筛选和筛选字段

有时字段同时出现在where子句和索引中,但是因为其他原因,不可能再定义索引片段,这个问题很复杂,整本书都会不断去解决这个问题。现在可以说的是,不是所有索引中的字段都可以用来定义索引片段。但是这些字段仍然可以用来减少对表页的同步读次数。作用很重要。我们把这些字段叫做screening字段,很多数据库系统也这么叫。 因为这就是这些字段做的事情。他们减少了对表行的读,因为可以用索引中的这字段来决定避免某些对表页读写。现阶段先不太深入,我们先提供一个初始的理解,理解是否predicates如何参与匹配和筛选过程。.


Relational databases have been around now for more than 20 years. In their early days, performance problems were widespread due to limited hardware resources and immature optimizers, and so performance was a priority consideration. The situation is very different nowadays; hardware and software have advanced beyond all recognition. It’s hardly surprising that performance is now assumed to be able to take care of itself! But the reality is that despite the huge growth in resources, even greater growth has been seen in the amount of information that is now available and what needs to be done with this information. Additionally, one crucial aspect of the hardware has not kept pace with the times: Disks have certainly become larger and incredibly cheap, but they are still relatively slow with regards to their ability to directly access data. Consequently many of the old problems haven’t actually gone away—they have just changed their appearance. Some of these problems can have enormous implications— stories abound of “simple” queries that might have been expected to take a fraction of a second appear to be quite happy to take several minutes or even longer; this despite all the books that tell us how to code queries properly and how to organize the tables and what rules to follow to put the right columns into the indexes. So it is abundantly clear that there is a need for a book that goes beyond the usual boundaries and really starts to think about why so many people are still having so many problems today.
内容概要:本文系统阐述了Java Persistence API(JPA)的核心概念、技术架构、核心组件及实践应用,重点介绍了JPA作为Java官方定义的对象关系映射(ORM)规范,如何通过实体类、EntityManager、JPQL和persistence.xml配置文件实现Java对象与数据库表之间的映射与操作。文章详细说明了JPA解决的传统JDBC开发痛点,如代码冗余、对象映射繁琐、跨数据库兼容性差等问题,并解析了JPA与Hibernate、EclipseLink等实现框架的关系。同时提供了基于Hibernate和MySQL的完整实践案例,涵盖Maven依赖配置、实体类定义、CRUD操作实现等关键步骤,并列举了常用JPA注解及其用途。最后总结了JPA的标准化优势、开发效率提升能力及在Spring生态中的延伸应用。 适合人群:具备一定Java基础,熟悉基本数据库操作,工作1-3年的后端开发人员或正在学习ORM技术的中级开发者。 使用场景及目标:①理解JPA作为ORM规范的核心原理与组件协作机制;②掌握基于JPA+Hibernate进行数据库操作的开发流程;③为技术选型、团队培训或向Spring Data JPA过渡提供理论与实践基础。 阅读建议:此资源以理论结合实践的方式讲解JPA,建议读者在学习过程中同步搭建环境,动手实现文中示例代码,重点关注EntityManager的使用、JPQL语法特点以及注解配置规则,从而深入理解JPA的设计思想与工程价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值