执行的SQL:
SELECT id,PROGRAM_ID,PROPER_TITLE,DURATION,LAYER_ID,PROGRAM_CLASS,CREATE_TIME,PROGRAM_CREATOR,RIGHT_LEVEL,FIELD_1 FROM
(SELECT TEMP_TAB.ID,TEMP_TAB.PROGRAM_ID,TEMP_TAB.PROPER_TITLE,TEMP_TAB.DURATION,TEMP_TAB.LAYER_ID,TEMP_TAB.PROGRAM_CLASS,
TEMP_TAB.CREATE_TIME,TEMP_TAB.PROGRAM_CREATOR,TEMP_TAB.RIGHT_LEVEL,TEMP_TAB.FIELD_1,RowNum as RN FROM
( SELECT MCM_NAVIGATION.ID,MCM_NAVIGATION.PROGRAM_ID,MCM_NAVIGATION.PROPER_TITLE,MCM_NAVIGATION.DURATION,MCM_NAVIGATION.LAYER_ID,MCM_NAVIGATION.PROGRAM_CLASS,
MCM_NAVIGATION.CREATE_TIME,MCM_NAVIGATION.PROGRAM_CREATOR,MCM_NAVIGATION.RIGHT_LEVEL,MCM_NAVIGATION.FIELD_1
FROM MCM_NAVIGATION
--INNER JOIN MCM_FULLTEXT ON MCM_NAVIGATION.ID = MCM_FULLTEXT.ID
--WHERE ((MCM_FULLTEXT.FULL_TEXT LIKE '%新闻%')
--AND MCM_FULLTEXT.STATE = 100
--AND MCM_NAVIGATION.PROGRAM_ID NOT IN (SELECT ID FROM MCM_NAVIGATION WHERE RIGHT_LEVEL>2))
where EXISTS
(select id from mcm_fulltext where mcm_fulltext.id = mcm_navigation.id and MCM_FULLTEXT.FULL_TEXT LIKE '%DÂÎÅ%' and mcm_fulltext.state = 100)
order by MCM_NAVIGATION.PROGRAM_ID,MCM_NAVIGATION.LAYER_ID,MCM_NAVIGATION.PROPER_TITLE ) TEMP_TAB)
WHERE RN <= 20
执行计划:Elapsed: 00:00:25.37Execution Plan
----------------------------------------------------------
Plan hash value: 236871974---------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 38635 | 53M| | 42695 (1)| 00:08:33 |
|* 1 | VIEW | | 38635 | 53M| | 42695 (1)| 00:08:33 |
| 2 | COUNT | | | | | | |
| 3 | VIEW | | 38635 | 52M| | 42695 (1)| 00:08:33 |
| 4 | SORT ORDER BY | | 38635 | 32M| 33M| 42695 (1)| 00:08:33 |
|* 5 | HASH JOIN RIGHT SEMI| | 38635 | 32M| 28M| 35462 (1)| 00:07:06 |
|* 6 | TABLE ACCESS FULL | MCM_FULLTEXT | 38635 | 27M| | 23608 (1)| 00:04:44 |
| 7 | TABLE ACCESS FULL | MCM_NAVIGATION | 802K| 107M| | 4686 (1)| 00:00:57 |
---------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter("RN"<=20)
5 - access("MCM_FULLTEXT"."ID"="MCM_NAVIGATION"."ID")
6 - filter("MCM_FULLTEXT"."FULL_TEXT" LIKE '%????????%' AND "MCM_FULLTEXT"."STATE"=100)
Statistics
----------------------------------------------------------
271 recursive calls
0 db block gets
110631 consistent gets
115269 physical reads
0 redo size
983 bytes sent via SQL*Net to client
513 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
39 sorts (memory)
0 sorts (disk)
0 rows processed两张表中的索引情况:
SQL> r
1 select user_ind_columns.index_name,user_ind_columns.column_name,
2 user_ind_columns.column_position,user_indexes.uniqueness
3 from user_ind_columns,user_indexes
4 where user_ind_columns.index_name = user_indexes.index_name
5* and user_ind_columns.table_name = 'MCM_FULLTEXT'INDEX_NAME COLUMN_NAME COLUMN_POSITION UNIQUENES
------------------------------ --------------- --------------- ---------
BIT_LAYER_ID LAYER_ID 1 NONUNIQUE
BIT_STATE_ID STATE 1 NONUNIQUE
BIT_UPDATE_TIME_ID UPDATE_TIME 1 NONUNIQUE
BIT_INDEX_STATE_ID INDEX_STATE 1 NONUNIQUE
P_MCM_FULLTEXT ID 1 UNIQUEElapsed: 00:00:00.01
SQL> select user_ind_columns.index_name,user_ind_columns.column_name,
2 user_ind_columns.column_position,user_indexes.uniqueness
3 from user_ind_columns,user_indexes
4 where user_ind_columns.index_name = user_indexes.index_name
5 and user_ind_columns.table_name = 'MCM_NAVIGATION';
INDEX_NAME COLUMN_NAME COLUMN_POSITION UNIQUENES
------------------------------ --------------- --------------- ---------
P_MCM_NAVIGATION ID 1 UNIQUE
BIT_STATE STATE 1 NONUNIQUE
BIT_PARENT_ID PARENT_ID 1 NONUNIQUE
BIT_RIGHT_LEVEL RIGHT_LEVEL 1 NONUNIQUEElapsed: 00:00:00.10
我想知道为什么这条sql语句没有走索引,需要如何优化,优化思路是什么?
SELECT id,PROGRAM_ID,PROPER_TITLE,DURATION,LAYER_ID,PROGRAM_CLASS,CREATE_TIME,PROGRAM_CREATOR,RIGHT_LEVEL,FIELD_1 FROM
(SELECT TEMP_TAB.ID,TEMP_TAB.PROGRAM_ID,TEMP_TAB.PROPER_TITLE,TEMP_TAB.DURATION,TEMP_TAB.LAYER_ID,TEMP_TAB.PROGRAM_CLASS,
TEMP_TAB.CREATE_TIME,TEMP_TAB.PROGRAM_CREATOR,TEMP_TAB.RIGHT_LEVEL,TEMP_TAB.FIELD_1,RowNum as RN FROM
( SELECT MCM_NAVIGATION.ID,MCM_NAVIGATION.PROGRAM_ID,MCM_NAVIGATION.PROPER_TITLE,MCM_NAVIGATION.DURATION,MCM_NAVIGATION.LAYER_ID,MCM_NAVIGATION.PROGRAM_CLASS,
MCM_NAVIGATION.CREATE_TIME,MCM_NAVIGATION.PROGRAM_CREATOR,MCM_NAVIGATION.RIGHT_LEVEL,MCM_NAVIGATION.FIELD_1
FROM MCM_NAVIGATION
--INNER JOIN MCM_FULLTEXT ON MCM_NAVIGATION.ID = MCM_FULLTEXT.ID
--WHERE ((MCM_FULLTEXT.FULL_TEXT LIKE '%新闻%')
--AND MCM_FULLTEXT.STATE = 100
--AND MCM_NAVIGATION.PROGRAM_ID NOT IN (SELECT ID FROM MCM_NAVIGATION WHERE RIGHT_LEVEL>2))
where EXISTS
(select id from mcm_fulltext where mcm_fulltext.id = mcm_navigation.id and MCM_FULLTEXT.FULL_TEXT LIKE '%DÂÎÅ%' and mcm_fulltext.state = 100)
order by MCM_NAVIGATION.PROGRAM_ID,MCM_NAVIGATION.LAYER_ID,MCM_NAVIGATION.PROPER_TITLE ) TEMP_TAB)
WHERE RN <= 20
执行计划:Elapsed: 00:00:25.37Execution Plan
----------------------------------------------------------
Plan hash value: 236871974---------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 38635 | 53M| | 42695 (1)| 00:08:33 |
|* 1 | VIEW | | 38635 | 53M| | 42695 (1)| 00:08:33 |
| 2 | COUNT | | | | | | |
| 3 | VIEW | | 38635 | 52M| | 42695 (1)| 00:08:33 |
| 4 | SORT ORDER BY | | 38635 | 32M| 33M| 42695 (1)| 00:08:33 |
|* 5 | HASH JOIN RIGHT SEMI| | 38635 | 32M| 28M| 35462 (1)| 00:07:06 |
|* 6 | TABLE ACCESS FULL | MCM_FULLTEXT | 38635 | 27M| | 23608 (1)| 00:04:44 |
| 7 | TABLE ACCESS FULL | MCM_NAVIGATION | 802K| 107M| | 4686 (1)| 00:00:57 |
---------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter("RN"<=20)
5 - access("MCM_FULLTEXT"."ID"="MCM_NAVIGATION"."ID")
6 - filter("MCM_FULLTEXT"."FULL_TEXT" LIKE '%????????%' AND "MCM_FULLTEXT"."STATE"=100)
Statistics
----------------------------------------------------------
271 recursive calls
0 db block gets
110631 consistent gets
115269 physical reads
0 redo size
983 bytes sent via SQL*Net to client
513 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
39 sorts (memory)
0 sorts (disk)
0 rows processed两张表中的索引情况:
SQL> r
1 select user_ind_columns.index_name,user_ind_columns.column_name,
2 user_ind_columns.column_position,user_indexes.uniqueness
3 from user_ind_columns,user_indexes
4 where user_ind_columns.index_name = user_indexes.index_name
5* and user_ind_columns.table_name = 'MCM_FULLTEXT'INDEX_NAME COLUMN_NAME COLUMN_POSITION UNIQUENES
------------------------------ --------------- --------------- ---------
BIT_LAYER_ID LAYER_ID 1 NONUNIQUE
BIT_STATE_ID STATE 1 NONUNIQUE
BIT_UPDATE_TIME_ID UPDATE_TIME 1 NONUNIQUE
BIT_INDEX_STATE_ID INDEX_STATE 1 NONUNIQUE
P_MCM_FULLTEXT ID 1 UNIQUEElapsed: 00:00:00.01
SQL> select user_ind_columns.index_name,user_ind_columns.column_name,
2 user_ind_columns.column_position,user_indexes.uniqueness
3 from user_ind_columns,user_indexes
4 where user_ind_columns.index_name = user_indexes.index_name
5 and user_ind_columns.table_name = 'MCM_NAVIGATION';
INDEX_NAME COLUMN_NAME COLUMN_POSITION UNIQUENES
------------------------------ --------------- --------------- ---------
P_MCM_NAVIGATION ID 1 UNIQUE
BIT_STATE STATE 1 NONUNIQUE
BIT_PARENT_ID PARENT_ID 1 NONUNIQUE
BIT_RIGHT_LEVEL RIGHT_LEVEL 1 NONUNIQUEElapsed: 00:00:00.10
我想知道为什么这条sql语句没有走索引,需要如何优化,优化思路是什么?
解决方案 »
- Oralce写存储过程
- 在存储过程中判断[]是中文输入法输入的还是英文输入法输入的?
- rac中几个节点时间不同步了,直接修改时间使他们一致,对数据库会不会造成影响啊
- 在SQL*Plus中用insert插进的都是中文的,为什么一存入服务器后,再select出的就是???”
- 下面的存储过程错在哪了?各位前辈,解决立马散分
- 在oracle中怎么将200501,200504,200502,200510重新排序为200501,200502,200504,200510
- 求详细解答。把数据库从一台电脑转移到另一太电脑。
- 如何写这样的sql
- 请教高手:怎样跟踪数据库的执行情况?
- python Oracle如何连接
- Oracle 能存储过程能像SQL Server一样方便的返回记录集吗?
- 查询oracle正在执行的语句(RAC)
exec dbms_stats.gather_table_stats(user,'MCM_FULLTEXT',cascade=>true);
exec dbms_stats.gather_table_stats(user,'MCM_NAVIGATION',cascade=>true);
第一:索引列中存在null,致使oracle认为会产生计算错误的情况下不走索引;
第二:索引列和要比较的数据的数据类型不一致。比如
where mcm_fulltext.id = mcm_navigation.id and MCM_FULLTEXT.FULL_TEXT LIKE '%DÂÎÅ%' and mcm_fulltext.state = 100
语句中 mcm_fulltext.state 列的类型是否是 int 类型?
2、索引比较的数据类型是一致的SQL> desc mcm_fulltext
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(38)
LAYER_ID NOT NULL NUMBER(38)
FULL_TEXT CLOB
SERIES_TEXT NVARCHAR2(1000)
SERIES_ID NUMBER(38)
STATE NOT NULL NUMBER(38)
UPDATE_TIME NOT NULL TIMESTAMP(6)
INDEX_STATE NOT NULL NUMBER(38)
COLUMN_TEXT NVARCHAR2(1000)
ROLE_TEXT NVARCHAR2(1000)
PROGRAM_TYPE NVARCHAR2(300)SQL> desc mcm_navigation
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(38)
PARENT_ID NOT NULL NUMBER(38)
LAYER_ID NOT NULL NUMBER(38)
PROPER_TITLE NOT NULL NVARCHAR2(1000)
DURATION NVARCHAR2(12)
START_POINT NVARCHAR2(12)
PROGRAM_TYPE NUMBER(38)
PROGRAM_CLASS NVARCHAR2(50)
VIEW_TIMES NUMBER(38)
PROGRAM_CREATOR NVARCHAR2(100)
CREATE_USERID NUMBER(38)
CREATE_TIME NOT NULL TIMESTAMP(6)
UPDATE_TIME TIMESTAMP(6)
STATE NOT NULL NUMBER(38)
RIGHT_LEVEL NUMBER(38)
PROGRAM_ID NUMBER(38)