視圖與索引

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