上一页 1 ··· 182 183 184 185 186 187 188 189 190 ··· 280 下一页
摘要: 通常情况下, 用UNION替换WHERE子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低. 在下面的例子中, LOC_ID 和REGION上都建有索引. 高效: SELE 阅读全文
posted @ 2019-07-03 11:00 樊伟胜 阅读(2815) 评论(0) 推荐(0) 编辑
摘要: 如果DEPTNO上有一个索引, 高效: SELECT * FROM EMP WHERE DEPTNO >=4 低效: SELECT * FROM EMP WHERE DEPTNO >3 两者的区别在于, 前者DBMS将直接跳到第一个DEPT等于4的记录而后者将首先定位到DEPTNO=3的记录并且向前 阅读全文
posted @ 2019-07-03 10:59 樊伟胜 阅读(980) 评论(0) 推荐(0) 编辑
摘要: 通常, 我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的 影响. 当ORACLE”遇到”NOT,他就会停止使用索引转而执行全表扫描. 举例: 低效: (这里,不使用索引) SELECT … FROM DEPT WHERE DEPT_CODE NOT = 0; 高效: (这里 阅读全文
posted @ 2019-07-03 10:57 樊伟胜 阅读(523) 评论(0) 推荐(0) 编辑
摘要: 如果表中有两个以上(包括两个)索引,其中有一个唯一性索引,而其他是非唯一性. 在这种情况下,ORACLE将使用唯一性索引而完全忽略非唯一性索引. 举例: SELECT ENAME FROM EMP WHERE EMPNO = 2326 AND DEPTNO = 20 ; 这里,只有EMPNO上的索引 阅读全文
posted @ 2019-07-03 10:46 樊伟胜 阅读(586) 评论(0) 推荐(0) 编辑
摘要: WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描. 举例: 低效: SELECT … FROM DEPT WHERE SAL * 12 > 25000; 高效: SELECT … FROM DEPT WHERE SAL > 25000/12; 这是一个非常实用的规则,请务 阅读全文
posted @ 2019-07-03 10:45 樊伟胜 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 如果两个或以上索引具有相同的等级,你可以强制命令ORACLE优化器使用其中的一个(通过它,检索出的记录数量少) . 举例: SELECT ENAME FROM EMP WHERE EMPNO = 7935 AND DEPTNO + 0 = 10 /*DEPTNO上的索引将失效*/ AND EMP_T 阅读全文
posted @ 2019-07-03 10:39 樊伟胜 阅读(1488) 评论(0) 推荐(0) 编辑
摘要: 当ORACLE无法判断索引的等级高低差别,优化器将只使用一个索引,它就是在WHERE子句中被列在最前面的. 举例: DEPTNO上有一个非唯一性索引,EMP_CAT也有一个非唯一性索引. SELECT ENAME FROM EMP WHERE DEPTNO > 20 AND EMP_CAT > ‘A 阅读全文
posted @ 2019-07-03 10:30 樊伟胜 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 当SQL语句的执行路径可以使用分布在多个表上的多个索引时, ORACLE会同时使用多个索引并在运行时对它们的记录进行合并, 检索出仅对全部索引有效的记录. 在ORACLE选择执行路径时,唯一性索引的等级高于非唯一性索引. 然而这个规则只有 当WHERE子句中索引列和常量比较才有效.如果索引列和其他表 阅读全文
posted @ 2019-07-03 10:29 樊伟胜 阅读(923) 评论(0) 推荐(0) 编辑
摘要: 当WHERE子句中有索引列, ORACLE不能合并它们,ORACLE将用范围比较. 举例: DEPTNO上有一个非唯一性索引,EMP_CAT也有一个非唯一性索引. SELECT ENAME FROM EMP WHERE DEPTNO > 20 AND EMP_CAT = ‘A’; 这里只有EMP_C 阅读全文
posted @ 2019-07-03 10:29 樊伟胜 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 基础表(Driving Table)是指被最先访问的表(通常以全表扫描的方式被访问). 根据优化器的不同, SQL语句中基础表的选择是不一样的. 如果你使用的是CBO (COST BASED OPTIMIZER),优化器会检查SQL语句中的每个表的物理大小,索引的状态,然后选用花费最低的执行路径. 阅读全文
posted @ 2019-07-03 10:26 樊伟胜 阅读(479) 评论(0) 推荐(0) 编辑
上一页 1 ··· 182 183 184 185 186 187 188 189 190 ··· 280 下一页