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';
本文探讨了SQL语句在不同环境下执行时间差异的原因,分析了事务回滚可能与执行计划有关,尤其是未利用索引进行全表扫描的问题。提供了检查实际执行计划的方法,并介绍了如何通过指定索引来强制优化SQL查询。
838

被折叠的 条评论
为什么被折叠?



