視圖
- 爲什麼需要視圖
- 有時候沒有必要向用戶展示完整的表的模型(所有字段信息)
- 表中某些涉及安全,隱私或權限的字段需要對用戶隱藏
- 綜上,視圖安全及易於使用
- 什麼是視圖
- SQL 允許通過查詢來定義“虛關係”(又稱作虛表,並不會真的去建立物理存儲表,所存儲的只是 SQL 查詢邏輯代碼。類似於方法定義或函數聲明,查詢就是具體實現)只有在調用的時候纔會去查詢,且不會存儲查詢結果集
- 如何定義視圖
create view v as < query expression >
< query expression >
可以是任何的合法查詢表達式- v 視圖名
- 更新視圖的原則
- from 子句中只有一個數據庫關係表
- 查詢中不含有 group by 或 having 子句
- select 子句中只包含關係的屬性名,不包含任何表達式、聚集或 distinct 聲明(因爲沒法反推原始數據表的結構)
- 任何沒有出現在 select 子句中的屬性可以取空值;即這些屬性上沒有 not null 約束,也不構成主鍵的一部分(要符合約束)
索引
- 索引的優點
- 加速表與表的 join
- 可以避免全表掃描 ,提高查詢效率
- 索引的缺點
- 創建和維護索引需要花費一定的時間(需要單獨建立索引表)
- 佔用額外的物理存儲空間(因爲1)
- 不適合頻繁增刪改的表(同上,因爲需要更新維護索引表)
- 索引數據結構(空間換時間)
- b+ 樹
- 位圖
- hash,由於映射關係,查詢的時候可以達到 O(1)(個人推測,hash的value記錄了數據的硬盤存儲地址信息,待驗證 )