指標 (資料庫)

维基百科,自由的百科全书
跳转至: 导航搜索

資料指標(Data Cursor) 是一種在資料庫引擎 (Database Engine) 中,用來處理結果集中資料列移動的一種結構,它可以讓開發人員或資料庫管理員作為資料集 (Resultset) 中瀏覽資料列的一種工具,通常也被外部的資料存取介面所使用,像是 ADOJDBCADO.NET 都有應用到資料指標。

原理[编辑]

資料指標是在資料庫產生結果集時,由資料庫引擎所產生的一個指標,用來指示目前正在存取的結果集的位置,經由這個指標,可以得到結果集中的資料列,並且可以依照需求來移動,但由於指標會佔用伺服器的資源,並且在指標開啟期間會啟用共用鎖定(Shared Lock),在多人使用的系統中容易造成死結的問題,因此目前大部份的應用程式都是使用僅前移型指標 (Forward-Only Cursor)。

種類[编辑]

依照功能來區分,有四種[1]

靜態指標[编辑]

靜態指標 (Static Cursor) 是利用暫存資料表作為儲存結果集空間的一種指標,它可以讓應用程式可以快速的存取結果集,但在靜態指標開啟期間,任何對資料表所做的變更都不會反映在結果集中;同時,在靜態指標中所作的修改,無法反映到資料庫中,此種指標是消耗資源度第三的指標。

動態指標[编辑]

動態指標 (Dynamic Cursor) 是可以反映資料庫中修改的一種指標,不過它並不會讓結果集的位置固定 (隨機變動),因此無法確實的以指標位置來判斷資料,並且它因為要隨時反映資料庫的變化,因此伺服器需要消耗較多的資源,此種指標是消耗資源第二高的指標。

索引鍵集型指標[编辑]

索引鍵集指標 (Keyset Cursor) 是動態指標的強化版本,藉由維護一個資料集位置對應表 (以 SQL Server 為例,會建立在 tempdb 的 keyset 資料表中),以維護在結果集中的順序不受更新而變化,但這相對的也付出了伺服器效能和資源消耗的代價,因此索引鍵集指標是最消耗伺服器資源的一種指標,在實務上應避免使用。

僅前移型指標[编辑]

僅前移型指標 (Forward-Only Cursor) 是一旦將指標往前移時,其走過的指標之前的結果集就會被捨棄,因此應用程式不能再往後移動指標,但也因此讓伺服器只需要記住指標在結果集中目前的位置即可,這讓它消耗的資源只有指標而已,是最省資源的一種指標,在實務中被廣泛使用,像 ADO.NET 的 DataReader 就只限定只能使用 Forward-Only Cursor。

可捲動或不可捲動[编辑]

資料庫指標又分為可捲動性 (scrollable cursor) 指標與不可捲動性指標,可捲動性指標代表資料庫指標可以依據指標的操作指令來移動,像是向前 (NEXT)、向後 (BACK)、朝指定位置移動等等性質。此種指標在執行資料庫複製 (Replication) 時,是一個相當重要的能力,但可捲動性指標又會比不可捲動性指標消耗更多的資源。

缺點[编辑]

資料庫指標有三個缺點:

  • 若在網路應用程式中使用,會造成大量的網路來回 (Round-trip),讓網路流量大增。
  • 若在多人應用程式中大量使用指標,會造成大量的鎖定,因此使用不當的話,讓資料庫發生死結的機率會大增。
  • 在SQL預存程序或SQL預存函數使用時,如果在巢式迴圈之中使用多個資料庫指標,將使得資料的存取效能嚴重低落。

參考資料[编辑]

数据库管理系统(DBMS) (查看 · 讨论 · 编辑)

概念
数据库 · 数据模型 · 数据库存储结构英语Database storage structures · 关系 (数据库) · 关系模型 · 分布式数据库 · ACID ( 原子性 · 一致性 · 隔離性 · 持久性 ) · Null值
关系数据库 · 关系模型 · 数据库规范化 · 數據庫完整性 · 實體完整性 · 參照完整性 · 关系数据库管理系统 
主键 · 外键 · 代理键 · 超键 · 候选键 

数据库组件
触发器 · 视图 · 数据库表 · 指标 (数据库) · 事务日志英语Transaction log · 数据库事务 · 并发控制 · 乐观锁 · 悲观锁 · 数据库索引 
存储程序 · 資料庫分割

SQL
分类: 数据查询语言 (DQL) - 資料定義語言 (DDL) - 資料操縱語言 (DML) - 資料控制語言 (DCL)
指令:SELECT · INSERT · UPDATE · MERGE · DELETE · JOIN · UNION · CREATE · DROP · Begin work · COMMIT · ROLLBACK · TRUNCATE · ALTER
安全: SQL資料隱碼攻擊 · 參數化查詢

数据库管理系统的实现

实现类型
关系数据库 · 檔案型資料庫 · Deductive · 維度化資料庫 · 階層式 · 圖形資料庫 · 对象数据库 · 物件關聯式資料庫 · Temporal · XML資料庫

数据库产品
对象型 (对比) · 关系型 (对比)

数据库组件
数据查询语言 · 查詢最佳化器 · 查詢計畫 · 嵌入式SQL · ODBC · JDBC · OLE DB