工作时表在Oracle,你怎么知道当你设置一个好的指数对一个糟糕指数?

有帮助吗?

解决方案

这取决于你的意思是"好"的和"坏".基本上,你需要意识到每一个索引你的加入将会增加表现在任何搜索由,列(所以加入索引的'lastname'列的一个人表将提高性能上查询"where lastname="在他们的),但是减少写信性能在整个表格。

为此原因是当你增加或更新行,它必须加或更新该表本身和每一个索引该行为的成员。所以如果你有五个索引表,每个外必须写信给六个地方-五指标和表格以及更新可以触及了六个地方,在最糟糕的情况。

指标创造一个平衡法则之间的查询写速度和速度。在某些情况下,诸如数据市场,这只是装载着数据的每周一次在一个过夜的工作,但询问,成千上万的次日,它使大量的感觉到过载有的索引和快速查询起尽可能多的。在这种情况的在线交易处理系统,但是,你想要尝试找到它们之间的平衡。

因此,在短期,增加的索引,以列用了很多选择的查询,而试图避免增加太多的等增加最多的使用列第一。

之后,其一项负荷的测试,看看如何能发生反应生产条件下,很多的调整,以找到一个aceeptable平衡。

其他提示

领域,多种多样,非常具体的,或独特的编好索引。例如日期和时间戳,唯一增加的数量(通常用作主键的),人的名称、牌照号码等。

一个反,将性别的-只有两个共同价值观念,所以指标不能真正帮助数量的减少排,必须进行扫描。

全长描述的形式自由的串使贫穷指标,作为无论是谁进行的查询很少知道确切价值。

线订购数据(例如时间戳或日期)通常被用来作为一个集群指数,部队的行为被保存在指令,并允许在以访问,大大加快范围内查询(例如给我所有的销售订单之间的日和日').在这种情况下,该数据库引擎可以简单地寻求第一个记录规定的范围并开始阅读的顺序,直到它在最后一个。

这里是一个伟大的SQL服务器上的文章:http://www.sql-server-performance.com/tips/optimizing_indexes_general_p1.aspx

虽然该机制不会的工作Oracle、技巧都是非常恰当的(减去东西在群集的索引,这不完全相同的方式工作,在Oracle).

@臭名昭着的牛-你必须思考的主要钥匙,没有索引。

@Xenph严-- 什么其他人都没有碰过是选择什么 种类 索引以创建。一些数据库真的不给你太多的选择,但是一些拥有大量的各种可能的索引。B-树是的 默认的 但并不总是最好的指数。选择正确的结构取决于这种使用你希望有。什么样的查询,你需要支持最?你是在读为主的或写的主要的环境?是你写占主导地位的更新的或者追加?等等,等等。

描述不同类型的指数及其利弊可以在这里: http://20bits.com/2008/05/13/interview-questions-database-indexes/ .

一些规则,如果你想改善一个特定的查询。

对于一个特定的表(其中你认为Oracle应该开始)尝试编制索引的每一列中使用其中的条款。把列与平等第一,随后通过列与一个范围或等。

例如:

WHERE CompanyCode = ? AND Amount BETWEEN 100 AND 200

如果列是非常大的大小(例如你都储存一些XML或东西)你可能会更好离开他们的指数。这将使该指数小扫描,假设你必须去表行,以满足选择名单。

或者,如果所有价值的选择和条款的指数Oracle将不需要访问表行。所以有时这是一个好主意,把选定的数值,最后在索引和避免表访问所有在一起。

你可以写一本关于最佳方法指数看作者乔纳森*刘易斯。

一个好的指数的东西,你可以依靠的是唯一一个具体表行。

一个常用的指数方案使用的数字增加1对每个行表中。每一个行将结束具有不同数量的指数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top