Oracle索引研究

Oracle索引研究

 

Oracle索引研究
索引本来是数据库里极其重要的东西,但是很多人对其分析的倒是很少,即使分析了也趋于学院味,所以本人(第一次发文章请大家别笑话啊)对索引分析如下。全都是来自实践的总结,而且在实际优化中得到验证,希望大家批评斧正:

索引的误区。
(A)字段标志位不可以建立索引。
这是一个错误的想法。看一个索引是否可以创建是看数据库表里的数据分布,而非这个字段是不是标志位。 例如:一个数据库里面如果标志位为 1 男 0女,这样的标志位建立索引就没有什么意义。因为即使建立索引也需要访问一半的数据,加上索引的开销,不如走权标扫描。但是比如下面的标志位:1 为已经发货,0为未发货。而0的数据库表记录数量非常的少,那么建立索引对整个数据库表的访问速度将是一个极大的提高。
在本人所在公司的一个项目里面因为在标志位上家你索引使原来需要运行40-60分钟的应用在瞬间可以完成。
(B) 字段为NULL不可以建立索引。
这也是一个错误的想法。解释这个问题要从数据库的索引机理说起。如下图(B-TREE):

当数据库表上建立索引以后,如果某一行上的数据为NULL那么索引将跳过这个字段认为它根本不存在。
那么我们可以得到如下有用的结论:
1、在一个字段上建立索引,即使这个字段有空值,但是只要你不用 is null语句一点也不影响您程序运行的速度。因为在这个表上建立的索引就当NULL值不存在。如果你搜索的是非空的值变没必要因为空值影响你建立索引的信心。
2、is not null语句的运行方式。 这个语句和is null语句可以说有很大的区别,因为它会走索引。别小看这个小小的差别。当你统计一个表的数据有多少null值的时候你要是用 where field is null那么你会死的很惨。索引你可以转变一下思路:用表的主键求得表记录总和 然后 减去 is not null的字段数就得到字段为空的数目。




 

sunjet2000 上传了这个附件:
2005-7-8 20:44
index.jpg (12.88 KB)
 

 

posted @ 2009-11-25 11:12  XGU_Winner  阅读(314)  评论(0编辑  收藏  举报