Archive | oracle RSS feed for this section

从Search Sort到Join

发表于《程序员》2015年4月B的一篇文章,在博客归档下。根据杂志社要求,在自己博客发表该文章亦须注明:本文为CSDN编译整理,未经允许不得转载,如需转载请联系market#csdn.net(#换成@)

想通过原理来说明一些技术白皮书上“什么时候应该使用什么”这个“应该”后面的原因。通过数据结构中经典的排序查找算法来推倒解释数据库中几种经典的表连接背后的算法原理,和原理决定的在各种数据库中不同的应用和限制。以简单的算法来讲出数据库系统中看着核心强大功能的本质的算法设计。较之白皮书中不同数据库的不同描述,尽量去除差异,通过原理来描述功能,做到深入浅出。

一、前言

Join的语义是把两张表的通过属性的关联条件值组合在一起,一般意义上数据库范式越高,表被拆分的越多,应用中要被Join的表可能会越多。在我们日常开发中几乎找不到不涉及Join的SQL语句,哪怕未显示包含Join这个关键字。[......]

阅读全文

Tags: , , , , , ,

Comments { 0 }

oracle分页技术性能比较

一、前言

在一个有30亿条数据的大表上分页,为了对方案进行性能测试,先忽略其他条件查询的影响,单看下分页部分的性能,顺便考察说明下oraclerownum使用中一些比较tricky的地方。 实验条件: 表结构如下,内有2千万条实验数据。 table-columns

二、实验

提供7种不同方式(其实是5种,二和四是一种、三和五是一种)方式的 。第一种只是为了demo一下假设的一种错误逻辑方式,第二种和第四种是一种逻辑正确,但是性能极差的方式。筛选下来看上去性能可行的方式是第五、第六、第七方式。 这里仅仅记录没中方式的执行结果和计划。

方式1

笨笨的想想。Oracle里面不是有个变量叫rownum,顾名思义,就是行号的意思,我要获取第十行到第二十行的数据,sql写起来很精练!比myslqlimitmssqltop折腾看着还要优雅!

[......]

阅读全文

Tags: ,

Comments { 0 }

B树在数据库索引中的应用剖析(发表版本)

最近一篇发表于《程序员》2014年6月刊上的文章。有点遗憾发现,有些部分被编辑修改过了,读起来有点怪怪的。最典型的是习惯于对某些比较经典的定义引用wikipedia或者原始白皮书中原始的E文,在文中发现都被硬译过了,表达的意思自己都有点看不懂了!

最终修改后提交的版本归档下:

引言

关于数据库索引,随便Google一个Oracle indexMysql index总能得到“某某索引之n条经典建议”之类大量结果。笔者认为,较之直接借鉴,在搞清实际需求的基础上,对备选方案的原理尽可能深入全面的了解会更有利于我们的决策。因为某种方案或者技术呈现出某种优势(包括可能没有被介绍到但一定存在的限制),不是厂商的白皮书这样规定,是由实现机制决定的或者说本身的结构决定的。

本文重点介绍数据结构中经典的树(B树)结构在数据库索引中的经典应用,也会涉及到几种数据库中对此支持的细微不同,以期比较完整的[......]

阅读全文

Tags: , , ,

Comments { 0 }

从Count看Oracle执行计划的选择

一、 前言

在调查一个性能问题的时候,一个同事问道,为什么数据库有些时候这么不聪明,明明表上有索引,但是在执行一个简单的count的时候居然全表扫描了!难道不知道走索引更快么?

试图从最简单的count来重新了解oracle查询计划的选择,以及最终产生的结果。虽然有些结果会让人觉得有些意外,并且可能会鄙视,这个查询计划选择真的不够聪明。但稍微用心点的去了解,做的已经足够细致了。大多数情况下,根据我们输入的信息,来自输入的SQL、表结构、索引状况、统计信息,会得出一个比较优的计划。所以和前面一直试图讲到索引和join方式一样,所有这样的选择不是因为数据库厂商这样规定的,而是基于存储的数据的实际情况,就应该(甚至说不得不)这么去选择。

二、实验条件

表中有20001000条记录,有二十多个字段,包括几个长度比较大的[......]

阅读全文

Tags: ,

Comments { 0 }

【译】oracle join 方式(Oracle? Database Performance Tuning Guide)

英文原文地址:Overview of Joins

@todo 翻译完毕,暂时保留原英文。对照校验完后删除应用,保持完整中文版本。

Joins?are statements that retrieve data from multiple tables. A join is characterized by multiple tables in the?FROM?clause. The existence of a join condition in the?WHERE?clause defines the relationship between the tables. In a join, one row set is called inner, and the other is called outer.?Join 是从多个表中获取数据的语句。join的特点是在From子句[......]

阅读全文

Tags: , ,

Comments { 0 }