您当前位置:优侠库 > 资讯攻略 >
来源:未知
2022-03-14 00:09:37 浏览: 分类:资讯攻略

oracle索引整理

一个

甲骨文的索引陷阱

一个表有几百万个数据,对某个字段做了索引,但查询时性能没有提升,可能主要是oracle的索引限制造成的。

Oracle的索引有一些索引限制。在这些索引限制的情况下,即使已经添加了索引,oracle仍然会执行全表扫描。与没有索引的查询相比,查询的性能不会提高,但是由于在数据库中维护索引的系统开销,性能可能会更差。

下面是一些常见的索引限制问题。

1.使用运算符不等于(< & gt, !=)

在下面的例子中,即使dept_id列中有索引,查询语句仍然执行全表扫描。

select * from staff _ num & lt;& gt1000;

但是开发中确实需要这种查询。没有解决问题的方法吗?

是啊!

通过使用or语法代替等号进行查询,可以使用index避免全表扫描:上面的语句改为下面的,就可以使用index了。

select * from dept here staff _ num & lt;1000或dept _ id & gt1000;

2.使用is null或is not null

使用is null或is nuo null还会限制索引的使用,因为数据库不定义null值。如果索引列中有很多null,则不会使用这个索引(除非索引是位图索引,这将在以后的博文中详细解释)。在sql语句中使用null会带来很多麻烦。

这个问题的解决方案是在构建表时将要索引的列定义为not 空(not null)。

3.使用功能

如果没有使用基于函数的索引,优化器在where子句中对带有索引的列使用函数时将忽略这些索引。以下查询将不使用索引:

select * from staff where trunc(生日)= ' 01-MAY-82 ';

但是,如果将函数应用于条件,索引可能是有效的。如果将上面的语句改为下面的语句,就可以搜索整个索引。

select * from员工出生日期& lt(to _ date(' 82年5月1日')+0.9999);

4.比较不匹配的数据类型。

比较不匹配的数据类型也是很难发现的性能问题之一。

在下面的示例中,dept_id是一个带有索引的varchar2字段,但是下面的语句将执行全表扫描。

select * from dept where dept _ id = 900198;

这是因为oracle会自动将where子句转换为to_number(dept_id)=900198,也就是3中提到的情况,从而限制了索引的使用。

您可以通过将SQL语句更改为以下形式来使用索引

select * from dept where dept _ id = ' 900198 ';

各种指标的使用场合和建议

(1)B *树索引。

常用于oltp系统的常规索引可以快速定位行,应该建立在高基数列上(即一列的唯一值除以行数是一个非常大的值,几乎没有相同的值)。

在表名(列名[列名...])

(2)逆向标引。

B*Tree的衍生产品,应用于特殊场合,是建立在ops环境加增加序列的列上,不适合区域扫描。

在表名(列名[列名...])反转

(3)指数下降。

B *树的导数应用于降序搜索语句,降序的索引码存储在索引中,提供快速降序搜索。

在表名(列名desc[列名...])

(4)位图索引。

适用于OLAP(联机分析)和决策处理(DSS)系统的位图管理索引应建立在低基数列中。

适合集中读取,不适合插入修改,提供比B *树索引更经济的空空间。

在表名(列名[列名]上创建位图索引索引名...])

在实际应用中,如果一个字段的值需要频繁更新,就不适合在其上创建位图索引。

在位图索引中,如果更新或插入一个值为n的记录,

那么对应表中所有n值的记录(可能是几百条或者几千条)都被Oracle锁定,

这意味着其他用户不能同时用值n更新这些记录,其他用户必须等待第一个用户提交它们。

为了获得锁,更新或插入数据,位图索引主要用于决策支持系统或静态数据。

(5)函数索引。

B *树的导积,应用于查询语句的条件列包含函数的情况,

由函数计算的索引代码值存储在索引中。可以在不修改应用程序的情况下提高查询效率。

索引创建策略

1.在创建索引之前导入数据。

2.没有必要为非常小的表创建索引

3.应该为值较小的字段(如性别字段)建立位图索引。

4.限制表中的索引数量

5.为索引设置适当的PCTFREE值

6.最好单独设置存储索引的表空。

唯一索引和非唯一索引仅适用于B树索引。

Oracle允许最多32个字段的复合索引。

由此,可以估算出如果使用索引,查询需要读取的数据块的数量。

需要读入的数据块越多,成本就越大,Oracle就越有可能不选择使用index。

您可以使用唯一索引,并且必须使用唯一索引。

如果可以添加non 空,就可以添加non 空约束。

我们需要统计表、索引和直方图的信息。

联合索引的顺序不同,影响索引的选择。尽量先放价值小的。

只有做到以上四点,数据库才能正确选择执行计划。

关键词:oracle索引整理

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227161.html

攻略资讯
安卓软件
安卓游戏