Archive | 三月, 2014

从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 }

B树在数据库索引中的应用剖析(原稿)

引言

关于数据库索引,随便Google一个Oracle indexMysql index总有大量的结果出来,其中不乏某某索引之n条经典建议。笔者认为,较之借鉴,在搞清楚了自己的需求的基础上,对备选方案的原理有个尽可能深入全面的了解会更有利于我们的选择和决策。因为某种方案或者技术呈现出某种优势(包括可能没有被介绍到但一定存在的限制),不是定义出来的,而是因为其实现机制决定的。就像LinkedList和ArrayList分别适用于什么应用不是Document里面定义的,是由其本身的结构决定的。数据库的索引也是一样,不是厂商的白皮书这样规定,而是其原理决定的。

本文只是重点介绍数据结构中经典的树(B树)结构在数据库索引中的经典应用,也会涉及到几种数据库中对此支持的细微不同,以期比较完整的描述实现原理。最终会发现这几种被不同数据库厂商冠以不同名字东西原理上其实差不多,理论上其实是一个东西。文[......]

阅读全文

Tags: , , , , , , ,

Comments { 1 }

【译】Oracle 索引(Oracle? Database Concepts)

比较完整权威的oracle的索引的介绍还是在来自于Oracle? Database Concepts翻译下。

@todo

Indexes and Index-Organized Tables

This chapter discusses indexes, which are schema objects that can speed access to table rows, and index-organized tables, which are tables stored in an index structure.

This chapter contains the following sections:

Overview of[......]

阅读全文

Tags: , ,

Comments { 0 }

fork/join计算Fibonacci数测试性能问题

一、说明

Java 并发之 Fork/Join一文中尝试了一个计算Fibonacci数的例子。即根据Fibonacci数的

[box]Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2)[/box]

的递归特征,使用Fork/Join框架来对任务进行分解,创建子任务来执行。本来只是想示例一下功能。在写main函数调用的时候又顺手写了个传统递归的执行方式,Fibonacci的递归太典型了。[highlight]想“欣赏”下,在Fork/Join框架下采用并发方式进行执行的优越性。但是结果却和期望大相径庭[/highlight]。

原因待分析,问题先记录下来。

二、代码:

1. 一个RecursiveTask,可以返回每次计算的值。

2. 调用入口main函数,顺便再改类中写了个[......]

阅读全文

Tags: ,

Comments { 0 }