InterBase 6.5的新特性 (轉)

worldblog發表於2007-12-15
InterBase 6.5的新特性 (轉)[@more@]

InterBase 6.5的新特性:namespace prefix = o ns = "urn:schemas--com::office" />

作者:Bill Todd(Team B成員)

譯者:to:TR@SOE">TR@SOE

原文URI:

 

1.  改良的快取管理

2.  指定

3.  取消語句的

4.  後設資料的性

5.  64位I/O

6.  ROWS語句

7.  以XML格式匯出資料

8.  其它改進

 

改良的快取管理

以前版本的IB中,如果快取大小超過10,000頁,將會降低。該問題已經得到解決。快取管理器也進行了修改以減少處理大快取時的額外開銷。例如,65,000頁快取所需要的總量幾乎減少了七兆。分配大的快取空間的速度也得到提高,快取I/O的也得到提高。在重負載的情況下,執行緒需要等待共享頁面加鎖而帶來的問題也消除了。增加快取大小並不能保證效能的提升,但是絕對沒有壞處。在數量大和其它一些場合時,增加快取大小會有幫助。

 

指定處理器

在執行的多處理器中,IB超級版本的效能可能會降低,因為WINDOWS總是不斷地將IB程式從一個處理器切換到另一個處理器。WINDOWS版本的IB 6.5可以在IBCONFIG檔案中包含如下的指令:_AFFINITY 1從而將IB程式與第一個處理器連線。透過改變數值,你可以將IB與任何一個處理器相連線,方法是修改對應的處理器的位。例如,1代表第一個處理器,2代表第二個,4代表第三個。這一語法允許你將IB分配到多個處理器上(IB 7將支援SMP)。例如,將IB分配到第二和第三個處理器時,可以這麼寫:CPU_AFFINITY 6。

 

取消語句的執行

使用IB的isc_d_free_statement可以取消任何語句的執行。如下所示:

 

procedure TfrmMain.StopQuery;

var

 StatementHandle:  TISC_STMT_HANDLE;

 ISC_Result:  ISC_STATUS;

begin

  StatementHandle := dmMain.ibqTest.StmtHandle;

  ISC_Result := isc_dsql_free_statement(StatusVector, @StatementHandle, DSQL_CANCEL);

  if ISC_Result > 0 then IBDatabaseError;

end;

 

在執行語句的執行緒裡不可以取消該語句的執行。因此,如果你希望使用這一特性,應該在一個後臺執行緒中執行你的SQL語句。該API不能與dbExpress或BDE合用,因為它們無法存取語句的控制程式碼,而該控制程式碼是函式呼叫的第二個引數。InterBase Express中提供該屬性,上面的程式碼來源於一個使用IBQuery的應用,它在一個後臺執行緒中執行SQL語句。

你取消一個語句的執行時,IB的表現如同該語句執行時出錯。被取消的語句所做的一切更改都被取消,但是事務處理還將繼續。你可以決定是要確認還是回滾事務。如果在ISQL中你執行了一個語句而又想取消,只要按Ctrl+C即可。

 

後設資料的安全性

在以前版本的IB中,你可以對系統表格授權或取消授權,但是這些在與恢復後不被保留。IB 6.5就不同了。你建立的任意中所有系統表格給予公眾的預設許可權是。它允許使用者看到系統表格,但是他們不能直接修改系統表格。IB 6.5有三個指令碼,讓你輕鬆地修改系統表格的許可權。readmeta.sql指令碼將系統表格給予SELECT許可權。writemeta.sql指令碼將系統表格給予所有的許可權。而blindmeta.sql指令碼收回所有給予的許可權。

限制系統表格的存取絕不是限制使用者使用DDL語句修改資料庫中其它表格的能力。IB引擎做了改進,即使使用者沒有許可權直接表格,引擎也可以代替使用者對系統表格進行相應的修改。

如果你用blindmeta.sql指令碼或者在早期的IB中使用REVOKE語句收回了系統表格存取的所有許可權,你將根本無法存取資料庫。IB 6.5第一次開啟IB 6 ODS 10的資料庫時,ODS版本將自動升為10.1,而公共使用者對系統表格的許可權將設定為SELECT。IB 6.5也能開啟ODS 9的資料庫,但是不會對它們進行任何修改。

IB 6.0可以開啟一個ODS 10.1的資料庫,只要公共使用者對系統表格的許可權至少為SELECT以上。不過,如果資料庫由IB 6.0伺服器備份和恢復,所有對系統表格的存取限制都將丟失。

 

64位檔案

IB現在支援Windows//平臺上的64位檔案I/O操作。資料庫的大小將只受限於的大小。只有2.4核心的Linux提供64位檔案I/O。如果是以前版本的Linux,IB 6.5將自動使用32位檔案I/O,其表現如IB 6.0一樣。

 

ROWS語句/editor/Editor.htm#_ftn1" name=_ftnref1>[1]

ROWS語句是IB SQL的擴充套件,它允許你控制SELECT/UPDATE/DELETE語句所影響的範圍。ROWS語句的語法如下:

 

ROWS [TO ] [BY ] [PERCENT] [WITH TIES]

ROWS語句在SQL語句中的位置如下:

 

 

 

 

 

要理解ROWS語句到底能做什麼的最好方法是看看例子。本文中所有的例子都使用IB自帶的Employee資料庫。第一個例子中,ROWS語句與ORDER BY連用,選出折扣最高的五個記錄:

SELECT * FROM SALES

ORDER BY DIUNT DESC

ROWS 1 TO 5

ORDER BY語句將返回的記錄以DISCOUNT的降序排列,而ROWS語句將返回的記錄數量限制為前五個。儘管你可以獨立使用ROWS而沒有ORDER BY,但是那樣沒有什麼意義,因為限制返回行的數量就意味著你需要以某種順序排列的前N個記錄。如果你需要返回的第一行就是結果記錄集的第一行,你可以把上面的查詢簡寫為:

SELECT * FROM SALES

ORDER BY DISCOUNT DESC

ROWS 5

如果你希望ORDER BY語句中具有相同列值的行都作為前五行顯示,你可以使用WITH TIES選項:

SELECT * FROM SALES

ORDER BY DISCOUNT DESC

ROWS 1 TO 5 WITH TIES

該查詢將返回8行而不是5行,因為前五行的DISCOUNT欄位中的某些資料也出現在其它行中。注意,使用WITH TIES時必須同時使用ORDER BY。

除了固定數量的列,你也可以指定返回結果資料集裡一定百分比的行數。如下例所示,它將返回SALES中TOTAL_VALUE在前10%內的記錄:

SELECT * FROM SALES

ORDER BY TOTAL_VALUE DESC

ROWS 10 PERCENT

PERCENT選項另一個有趣的應用是選擇一個平均分佈的行子集。 下面的查詢返回五行,每個行與它的鄰居在表中的距離都是20%的記錄數。儘管該查詢沒有使用ORDER BY,但是使用ORDER BY也是可以的。例如,要獲得根據地理位置均勻分佈的行,就可以根據州名或ZIP來排序表格。

SELECT * FROM CUSTOMER

ROWS 100 BY 20 PERCENT

ROWS語句可以和統計值聯合使用。下面的查詢根據各銷售人員的定單總額排序而返回前三個銷售人員的資訊。第二個查詢根據各銷售人員的定單總額返回前25%的銷售人員資訊:

 

SELECT SALES_REP, SUM(TOTAL_VALUE) AS TOTAL

FROM SALES

GROUP BY SALES_REP

ORDER BY 2 DESC

ROWS 3

 

SELECT SALES_REP, SUM(TOTAL_VALUE) AS TOTAL

FROM SALES

GROUP BY SALES_REP

ORDER BY 2 DESC

ROWS 25 PERCENT

ROWS語句可以和UPDATE合用,來給工資最高的前10名員工加工資:

UPDATE EMPLOYEE

SET SALARY = SALARY * 1.01

ORDER BY SALARY DESC

ROWS 10

你也可以將ROWS與DELETE合用,來刪除工資最高的前10名員工。如果你還想刪除那些與前10名員工工資一樣的員工,只要加入WITH TIES選項:

DELETE FROM EMPLOYEE

ORDER BY SALARY DESC

ROWS 10

 

以XML格式匯出資料

InterBase Express現在包含一個新的類,TIBOutputXML,讓你輕鬆地以XML來讀取資料。下表中列出了TIBOutputXML的屬性。要使用這個類,你必須在檔案中包含IBXML單元。InterBase XML支援是以獨立的DLL實現的,所以如果你不需要該功能,也就不用分發該檔案。

屬性

描述

HeaderTag

XML流中作為頭部標記的字串。如果它為空,那麼就使用"

相關文章