视图与索引

视图
  • 为什么需要视图
    • 有时候没有必要向用户展示完整的表的模型(所有字段信息)
    • 表中某些涉及安全,隐私或权限的字段需要对用户隐藏
    • 综上,视图安全及易于使用
  • 什么是视图
    • 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记录了数据的硬盘存储地址信息,待验证
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章