视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle查看表有哪些列在谓词条件过滤中
2020-11-09 07:25:24 责编:小采
文档


Oracle 查看表有哪些列在谓词条件过滤中! 有时候在优化的过程当中,需要查看某个表有哪些列在sql当中用作谓词过滤,我们就可以用如下sql查询。 1. 先创建test表 SQL create table test as select * from dba_objects;Table created. 1 2 3 SQL create table

Oracle 查看表有哪些列在谓词条件过滤中!


有时候在优化的过程当中,需要查看某个表有哪些列在sql当中用作谓词过滤,我们就可以用如下sql查询。

1. 先创建test表

1

2

3

SQL>createtabletestasselect*fromdba_objects;

Tablecreated.

2.通过sql查看这个表是否有其他sql用到了这个表的列当作过滤条件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

SQL>select

2 r.nameowner,

3 o.nametable_name,

4 c.namecolumn_name,

5 equality_preds,---等值过滤

6 equijoin_preds,---等值JOIN过滤 比如where a.id=b.id

7 nonequijoin_preds,----不等JOIN过滤

8 range_preds,----范围过滤 > >= < <= between and

9 like_preds, ----LIKE过滤

10 null_preds, ----NULL 过滤

11 timestamp

12 from

13 sys.col_usage$u,

14 sys.obj$o,

15 sys.col$c,

16 sys.user$r

17 where

18 o.obj#=u.obj#

19 andc.obj#=u.obj#

20 andc.col#=u.intcol#

21 andr.name='SCOTT'ando.name='TEST';

norowsselected

3.执行一个简单的sql,用object_id过滤,执行完成之后,再次查看

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

SQL>selectcount(*)fromtestwhereobject_id=23121;

COUNT(*)

----------

1

SQL>select

2 r.nameowner,

3 o.nametable_name,

4 c.namecolumn_name,

5 equality_preds,---等值过滤

6 equijoin_preds,---等值JOIN过滤 比如where a.id=b.id

7 nonequijoin_preds,----不等JOIN过滤

8 range_preds,----范围过滤 > >= < <= between and

9 like_preds, ----LIKE过滤

10 null_preds, ----NULL 过滤

11 timestamp

12 from

13 sys.col_usage$u,

14 sys.obj$o,

15 sys.col$c,

16 sys.user$r

17 where

18 o.obj#=u.obj#

19 andc.obj#=u.obj#

20 andc.col#=u.intcol#

21 andr.name='SCOTT'ando.name='TEST';

norowsselected

4. 这里可能就有疑问了,在第三步中有sql使用object_id谓词进行过滤,为什么sql还是不查询到呢?因为此时信息还没刷新到磁盘

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

SQL>select

2 r.nameowner,

3 o.nametable_name,

4 c.namecolumn_name,

5 equality_preds,---等值过滤

6 equijoin_preds,---等值JOIN过滤 比如where a.id=b.id

7 nonequijoin_preds,----不等JOIN过滤

8 range_preds,----范围过滤 > >= < <= between and

9 like_preds, ----LIKE过滤

10 null_preds, ----NULL 过滤

11 timestamp

12 from

13 sys.col_usage$u,

14 sys.obj$o,

15 sys.col$c,

16 sys.user$r

17 where

18 o.obj#=u.obj#

19 andc.obj#=u.obj#

20 andc.col#=u.intcol#

21 andr.name='SCOTT'ando.name='TEST';

OWNER TABLE_NAME COLUMN_NAME EQUALITY_PREDSEQUIJOIN_PREDSNONEQUIJOIN_PREDSRANGE_PREDSLIKE_PREDSNULL_PREDSTIMESTAMP

-------------------- -------------------- -------------------- -------------- -------------- ----------------- ----------- ---------- ---------- ---------

SCOTT TEST OBJECT_ID 1 0 0 0 0 031-MAR-14

SCOTT TEST OBJECT_ID 1 0 0 0 0 031-MAR-14

在过了一段时间之后,通过这个sql就可以查询到TEST表就有object_id这个列被sql当作谓词条件了。另外可以通过如下sql来刷新当前内存信息到磁盘,这样也可以立即看到信息

1

2

3

SQL>execdbms_stats.flush_database_monitoring_info;

PL/SQLproceduresuccessfullycompleted.

  • http://www.savedba.com/oracle-查看表有哪些列在谓词条件过滤中!/
  • 下载本文
    显示全文
    专题