USE_CONCAT对X$表有时并不工作

    上一次发现访问X$KSLEI时, 用这个Hint很有效, 后来在更多的机器上测试, 发现有的数据库上这个Hint并不工作, 如下所示:

SQL> SELECT /*+ USE_CONCAT */ * FROM X$KSLEI WHERE INDX IN (1,2);

----------------------------------------------------
| Id  | Operation        | Name    | Rows  | Bytes |
----------------------------------------------------
|   0 | SELECT STATEMENT |         |    20 |  1680 |
|*  1 |  FIXED TABLE FULL| X$KSLEI |    20 |  1680 |
----------------------------------------------------

    最后只好化简为繁, 改成用UNION ALL来实现, 这下Oracle没得选择了.

SQL> SELECT * FROM X$KSLEI WHERE INDX = 1 UNION ALL
  2  SELECT * FROM X$KSLEI WHERE INDX = 2
  3  /

----------------------------------------------------
| Id  | Operation                | Name            |
----------------------------------------------------
|   0 | SELECT STATEMENT         |                 |
|   1 |  UNION-ALL               |                 |
|*  2 |   FIXED TABLE FIXED INDEX| X$KSLEI (ind:2) |
|*  3 |   FIXED TABLE FIXED INDEX| X$KSLEI (ind:2) |
----------------------------------------------------

    很多人动不动就想用Direct SGA Access的方法来写数据库监控程序, 其实好好调一下SQL, 可以不用那么复杂.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • I graduated from Yale University 5 years ago.
  • 五年前, 我从耶鲁大学毕业.
  • It is desirable to apply to good schools.
  • 申请好学校是令人向往的.
  • Mary is in her freshman year.
  • 玛丽大学一年级.
  • Lily is a Sophomore now.
  • 莉莉现在大学二年级.
  • Mike is already a junior.
  • 迈克已经大学三年级了.