ITPub博客

首页 > 数据库 > Oracle > 设计开发时慎重决定列是否为空

设计开发时慎重决定列是否为空

原创 Oracle 作者:luisedalian 时间:2014-01-17 16:38:42 0 删除 编辑

大家在进行表结构设计时,对于表的字段是否为空比较随意,这是错误的。

例如,允许id1id2列为空的情况下,比较条件id1 = id2就应该转换为nvl(id1, 0) = nvl(id2, 0)

案例1

点击(此处)折叠或打开

  1. DROP TABLE t;
  2. CREATE TABLE t AS SELECT * FROM dba_objects WHERE object_id IS NOT NULL;
  3. CREATE INDEX idx_t ON t(object_id);
  4. ANALYZE TABLE t COMPUTE STATISTICS FOR TABLE FOR ALL INDEXES FOR ALL INDEXED COLUMNS;
  5. EXPLAIN PLAN FOR SELECT count(*)FROM t;
  6. SELECT * FROM TABLE(dbms_xplan.display);

  7. PLAN_TABLE_OUTPUT
  8. --------------------------------------------------------------------
  9. Plan hash value: 2966233522


点击(此处)折叠或打开

  1. --前面不走索引的原因是在object_id列上没有not null约束,所以有可能能有null值,而null值是不会出现在索引中的.
  2. --所以为了避免统计的数据不准确,Oracle是不会走索引的.
  3. --在试着给 object_id 加上is not null, 明确告诉Oracle该索引列值不会为空。
  4. EXPLAIN PLAN FOR SELECT COUNT(*) FROM t WHERE object_id IS NOT NULL;
  5. SELECT * FROM TABLE(dbms_xplan.display);

  6. PLAN_TABLE_OUTPUT
  7. -------------------------------------------------------------------------------
  8. Plan hash value: 2371838348


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1072248/,如需转载,请注明出处,否则将追究法律责任。

上一篇: IF的顺序有讲究
请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    5642446