索引是優化查詢時采用一種數據庫技術,索引有簇索引、非簇索引、唯一索引等。
設計索引時,要注意索引寬度,盡量減少索引的寬度。索引的寬度不是由字段的多少決定的,而是由字段的長度來決定。對于窄索引關鍵字,在每一索引頁上放置更多的關鍵字和指針,這樣就能花銷更少的I/O找到數據。
對于復合索引,選擇首列相當重要,否則可能不能利用該索引,當利用復合索引查詢時。必須確保查詢從首列開始。
索引還有一個填充因子(FillFactor),填充因子的大小視表的數據增長量和主鍵定義的情況而定。
觸發器和存儲過程(Trigger&&Procedure)
觸發器在維護數據完整性起著重要作用,它比參照更具靈活性,
也能實現三層結構中數據層的業務規則。
存儲過程是采用SQL及流程控制語句編寫的完成某種業務的腳本。存儲過程在數據處理上具有處理速度快、處理靈活等優點。
但是,存儲過程極大地增加了與數據庫之間的耦合,在數據庫遷移時,需要重寫存儲過程,從而增加了版本維護的工作量。如果數據庫要求從遷移性考慮,應盡量避免使用存儲過程或者觸發器。
如果不人為修改PowerDesigner的觸發器,其遷移性PowerDesigner自動解決。
存儲(Storage)
不同的數據庫中有不同的概念,Sybase稱為設備(Device),SQL Server稱為文件或文件組(File、FileGroup),而Oracle稱為表空間(TableSpace)。
根據系統創建一個或多個存儲,按一定的優化規則存放。
數據庫的劃分
數據庫的劃分以它的物理分布為原則,而不應數據量、表類型等原則來劃分,數據庫的多少對數據庫的性能影響不大。對于訪問數據量大、訪問頻繁的表來說,I/O操作很容易形成嚴重的瓶頸,因此減少I/O操作和I/O操作阻塞是數據庫設計考慮的主要問題,解決方法將將表放在多個設備上,設備需創建在不同的物理驅動器上,最好能用智能型或陣列。
日志和數據分開存儲在不同設備上,如果索引多且占用空間大,也可以采用如此方式。