sql语句在plsql窗口执行只需花费不到一秒的时间,但是跑程序的时候会导致事务回滚。
可能原因是:sql语句真正的执行计划未走索引,全表扫描,导致执行时间较长。
解决办法:
一.查看sql语句在数据库的实际执行计划
在命令窗口执行:
1.sql Eg:SELECT name FROM student WHERE id = '201302564895';
2.select sql_id, child_number from v$sql where sql_text like 'SELECT name%'; like中的实际文本不要太长,会导致查询不出来,用%替换。
3.select * from table(dbms_xplan.display_cursor('7ac89j1xsn5z3' , 0 )) ;
'7ac89j1xsn5z3' 是sql_id
二.如何使sql语句强制走指定索引(oracle有时候会不走索引走全表扫描)
强制按索引搜索,语法:
SELECT /*+INDEX(A PK_STUDENT)*/--增加此处 表名用别名
A.NAME
FROM STUDENT A
WHERE A.ID= '2354102';