1.结合执行计划来看,看执行计划的方法首先 SQL>EXPLAIN PLAN FOR 你的sql语句; 如 SQL>EXPLAIN PLAN FOR SELECT * FROM EMP WHERE EMPNO=7369; 然后 SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE')); 查看结果就是前面SQL语句的执行计划。2.如果name字段有索引,那么name like '%123%'不能用上索引,只能全表扫描,这样速度就慢了.改为name like '123%'可以用上索引.
用sql语句建索引,如对表sometab的列somecol建立索引,则其语句为CREATE INDEX idx_sometab_somecol ON sometab(somecol);上面的idx_sometab_somecol是索引名称,可以自己定义。索引相当于列的一个目录,建立了上面的索引后,如果where后面有somecol的查询条件会加快查询速度,如select * from sometab where somecol='SOMEVALUE';这个语句会先找索引,在索引中找到somecol对应的行后,再从表中将数据返回给用户。
基本上是
如果能达到要求的话,少用group by,少用子查询嵌套,少用表关联
省略不必要的代码
1.结合执行计划来看,看执行计划的方法首先
SQL>EXPLAIN PLAN FOR 你的sql语句;
如
SQL>EXPLAIN PLAN FOR SELECT * FROM EMP WHERE EMPNO=7369;
然后
SELECT plan_table_output
FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));
查看结果就是前面SQL语句的执行计划。2.如果name字段有索引,那么name like '%123%'不能用上索引,只能全表扫描,这样速度就慢了.改为name like '123%'可以用上索引.
看下SQL优化方面的知识