打印本文 打印本文 关闭窗口 关闭窗口
Oracle常見問題集(三)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数6580  更新时间:2009/4/22 22:05:50  文章录入:mintao  责任编辑:mintao
不能

每個用戶都有一個private synonym - sal_limit , 它們是不同的物件

select count(*0 from work_city where sdesc like ''''NEW%'''';

兩個用戶訪問相同的物件public synonym - work_city

select a.sdesc,b.location from work_city a , plant_detail b where

a.city_id = b.city_id

不能

用戶jack 通過private synonym訪問plant_detail jill 是表的所有者,物件不同.

C. 兩個SQL語句中必須使用相同的名字的綁定變數(bind variables)

 

例如:

 

第一組的兩個SQL語句是相同的(可以共用),而第二組中的兩個語句是不同的(即使在運行時,賦於不同的綁定變數相同的值)

a.

select pin , name from people where pin = :blk1.pin;

select pin , name from people where pin = :blk1.pin;

 

b.

select pin , name from people where pin = :blk1.ot_ind;

select pin , name from people where pin = :blk1.ov_ind;

4. 選擇最有效率的表名順序(只在基於規則的優化器中有效)

ORACLE的解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最後的表(基礎表 driving

table)將被最先處理. FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作爲基礎表.ORACLE處理多個表時,

會運用排序及合併的方式連接它們.首先,掃描第一個表(FROM子句中最後的那個表)並對記錄進行派序,然後掃描第二個表(FROM子句中最後第二個表),最後將所有從第二個表中檢索出的記錄與第一個表中合適記錄進行合併.

 

例如:

TAB1 16,384 條記錄

TAB2 1 條記錄

 

選擇TAB2作爲基礎表 (最好的方法)

select count(*) from tab1,tab2 執行時間0.96

 

選擇TAB2作爲基礎表 (不佳的方法)

select count(*) from tab2,tab1 執行時間26.09

 

如果有3個以上的表連接查詢, 那就需要選擇交叉表(intersection table)作爲基礎表,

交叉表是指那個被其他表所引用的表.

 

例如:

 

EMP表描述了LOCATION表和CATEGORY表的交集.

 

SELECT *

FROM LOCATION L ,

CATEGORY C,

EMP E

WHERE E.EMP_NO BETWEEN 1000 AND 2000

AND E.CAT_NO = C.CAT_NO

AND E.LOCN = L.LOCN

 

將比下列SQL更有效率

 

SELECT *

FROM EMP E ,

LOCATION L ,

CATEGORY C

WHERE E.CAT_NO = C.CAT_NO

AND E.LOCN = L.LOCN

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ...  下一页 >> 

打印本文 打印本文 关闭窗口 关闭窗口