[20140714]关于在那些字段建立索引的问题

简介: [20140714]关于在那些字段建立索引的问题.txt 前几天有人问我,如何确定在那些字段建立索引的问题,我的方法很简单,通过awr报表可以来确定一部分索引的建立,应用程序绑定做的很 好,方法很简单,可以使用toad的SGA trace,组合一些查询条...

[20140714]关于在那些字段建立索引的问题.txt

前几天有人问我,如何确定在那些字段建立索引的问题,我的方法很简单,通过awr报表可以来确定一部分索引的建立,应用程序绑定做的很
好,方法很简单,可以使用toad的SGA trace,组合一些查询条件很容易确定,这个方法的缺陷就是,如果你应用绑定没做好,shared pool设置
很大的情况下,每次扫描真的是一种灾难!(不是很快,多次操作心里很烦!)

与别人交谈,提到利用col_usage$,可以知道谓词的使用情况,从而决定在那些字段做了索引.我google相关信息发现如下链接:

http://www.dba-scripts.com/scripts/diagnostic-and-tuning/troubleshooting/find-missing-index/


SELECT *
  FROM (  SELECT    'the column '
                 || c.name
                 || ' of the table '
                 || us.name
                 || '.'
                 || o.name
                 || ' was used '
                 || u.equality_preds
                 || ' times in an equality predicate and '
                 || u.equijoin_preds
                 || ' times in an equijoin predicate and is not indexed'
                    AS colum_to_index
            FROM sys.col_usage$ u,
                 sys.obj$ o,
                 sys.col$ c,
                 sys.user$ us
           WHERE     u.obj# = o.obj#
                 AND u.obj# = c.obj#
                 AND us.user# = o.owner#
                 AND u.intcol# = c.col#
                 AND us.name = '&SCHEMA_NAME'
                 AND c.name NOT IN (SELECT column_name
                                      FROM dba_ind_columns
                                     WHERE index_owner = '&SCHEMA_NAME')
                 AND (u.equality_preds > 100 OR u.equijoin_preds > 100)
        ORDER BY u.equality_preds + u.equijoin_preds DESC)
WHERE ROWNUM

--我做了一些改动加入统计信息,方便确定那些字段需要建立索引:

/* Formatted on 2014/7/14 10:25:10 (QP5 v5.252.13127.32867) */
SELECT *
  FROM (  SELECT    'the column '
                 || c.name
                 || ' of the table '
                 || us.name
                 || '.'
                 || o.name
                 || ' was used '
                 || u.equality_preds
                 || ' times in an equality predicate and '
                 || u.equijoin_preds
                 || ' times in an equijoin predicate and is not indexed'
                    AS colum_to_index,
                 h.DISTCNT,
                 h.ROW_CNT,
                 h.NULL_CNT,
                 h.DENSITY,
                 u.EQUALITY_PREDS,
                 u.EQUIJOIN_PREDS,
                 u.NONEQUIJOIN_PREDS,
                 u.RANGE_PREDS,
                 u.LIKE_PREDS,
                 u.NULL_PREDS
            FROM sys.col_usage$ u,
                 sys.obj$ o,
                 sys.col$ c,
                 sys.hist_head$ h,
                 sys.user$ us
           WHERE     u.obj# = o.obj#
                 AND u.obj# = c.obj#
                 AND us.user# = o.owner#
                 AND u.intcol# = c.col#
                 AND us.name = '&SCHEMA_NAME'
                 AND h.obj# = o.obj#
                 AND h.col# = c.col#
                 AND c.name NOT IN (SELECT column_name
                                      FROM dba_ind_columns
                                     WHERE index_owner = '&SCHEMA_NAME')
                 AND (   u.equality_preds > 100
                      OR u.equijoin_preds > 100
                      OR u.RANGE_PREDS > 100)
        ORDER BY u.equality_preds + u.equijoin_preds DESC)
WHERE ROWNUM

--大家可以根据自己的需要修改查询范围和条件!

目录
相关文章
|
8月前
|
索引
15. 索引是越多越好嘛? 什么样的字段需要建索引, 什么样的字段不需要 ?
是否越多索引越好?并非如此。应根据需求建索引:主键自动索引,频繁查询、关联查询、排序、查找及统计分组字段建议建索引。但表记录少,频繁增删改操作,频繁更新的字段,以及使用频率不高的查询条件则不需要建索引。
134 0
|
8月前
|
存储 关系型数据库 索引
10. 在一个非主键字段上创建了索引, 想要根据该字段查询到数据, 需要查询几次 ?
在非主键字段上创建索引,查询数据通常需两次。对于MyISAM,先通过索引找到数据行指针,再获取数据;而InnoDB则先找主键ID,再从主键索引中查找数据。
50 0
|
3月前
|
数据库 索引
联合索引和单独列索引哪个更好
【10月更文挑战第15天】联合索引和单独列索引哪个更好
82 2
|
7月前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(6)-索引使用(覆盖索引与回表查询,前缀索引,单列索引与联合索引 )、索引设计原则、索引总结
MySQL数据库——索引(6)-索引使用(覆盖索引与回表查询,前缀索引,单列索引与联合索引 )、索引设计原则、索引总结
151 1
|
8月前
|
监控 关系型数据库 数据库
|
存储 数据库 索引
一般会在什么样字段上添加什么样的索引
在数据库中,索引是一种用于加快数据检索速度的数据结构。通过在特定的字段上创建索引,可以大幅度提高查询效率。然而,不是所有的字段都适合创建索引,因为索引的创建和维护也会带来额外的开销。在选择字段创建索引时,需要综合考虑数据的查询频率、数据的更新频率以及索引的存储和性能开销等因素。下面将介绍一些常见的字段类型和索引的选择策略。
208 1
|
索引
索引是越多越好嘛? 什么样的字段需要建索引, 什么样的字段不需要 ?
索引是越多越好嘛? 什么样的字段需要建索引, 什么样的字段不需要 ?
145 0
|
存储 SQL 关系型数据库
【名词解释与区分】聚集索引、非聚集索引、主键索引、唯一索引、普通索引、前缀索引、单列索引、组合索引、全文索引、覆盖索引
【名词解释与区分】聚集索引、非聚集索引、主键索引、唯一索引、普通索引、前缀索引、单列索引、组合索引、全文索引、覆盖索引
538 1
【名词解释与区分】聚集索引、非聚集索引、主键索引、唯一索引、普通索引、前缀索引、单列索引、组合索引、全文索引、覆盖索引
|
数据库 索引
索引是越多越好嘛? 什么样的字段需要建索引
索引的作用是加快数据库的查询速度,但并不是索引越多越好。过多的索引会增加数据库的存储空间和维护成本,并且在写操作时可能会降低性能。
239 0

热门文章

最新文章

相关实验场景

更多