【正文】
2張行數(shù)不一致的表連接 表TAB1行數(shù):16,384行 表TAB2行數(shù):1行SELECT COUNT(*) FROM TAB2, TAB1?!餝ELECT COUNT(*) FROM TAB1, TAB2。2)3張表連接 SELECT * FROM EMP E, LOC L, CAT C WHERE BETWEEN 1000 AND 2000 AND = AND = ?!餝ELECT * FROM LOC L, CAT C, EMP E WHERE BETWEEN 1000 AND 2000 AND = AND = 。 Where語句順序的效率1) 使用索引引起的where語句效率使用AND語句時行數(shù)多的放在前面SELECT * FROM emp E WHERE emp_sal 50000 AND emp_type = 39。MANAGER39。 AND 25 (SELECT COUNT(*) FROM EMP WHERE emp_mgr = )。○SELECT * FROM emp E WHERE 25 (SELECT COUNT(*) FROM EMP WHERE emp_mgr = ) AND emp_sal 50000 AND emp_type = 39。MANAGER39。使用OR語句時,行數(shù)多的放在后面SELECT * FROM emp E WHERE 25 (SELECT COUNT(*) FROM EMP WHERE emp_mgr = ) OR (emp_sal 50000 AND emp_type = 39。MANAGER39。)?!餝ELECT * FROM emp E WHERE (emp_sal 50000 AND emp_type = 39。MANAGER39。) OR 25 (SELECT COUNT(*) FROM EMP WHERE emp_mgr = )。2)ROWID的使用 使用ROWID的WHERE語句效率最高。 SELECT ROWID, ... INTO :emp_rowid, ... FROM emp WHERE = 56722 FOR UPDATE。UPDATE emp SET = ... , WHERE ROWID = :emp_rowid。 3)減少訪問次數(shù)SELECT emp_name, sal, grade FROM emp WHERE emp_no = 0342。SELECT emp_name, sal, grade FROM emp WHERE emp_no = 0291?!餝ELECT , , , , , FROM emp A, emp B WHERE = 0342 AND = 0291。 4)Where語句的索引的使用 (1)SUBSTRSELECT acc_name, trans_date, amount FROM transaction WHERE SUBSTR(account_name,1,7) = 39。CAPITAL39。 ○SELECT acc_name, trans_date, amount FROM transaction WHERE account_name LIKE 39。CAPITAL%39。 (2)!= SELECT acc_name, trans_date, amount FROM transaction WHERE amount != 0。 ○ SELECT acc_name, trans_date, amount FROM transaction WHERE amount 0。 (3)TRUNCSELECT acc_name, trans_date, amount FROM transaction WHERE TRUNC(trans_date) = TRUNC(SYSDATE)。 ○SELECT acc_name, trans_date, amount FROM transaction WHERE trans_date BETW