news 2026/4/23 11:45:12

一课一得:SQL 视图与索引的学习总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一课一得:SQL 视图与索引的学习总结
一、目录
  1. 学习背景:为什么学视图与索引?
  2. 知识点 1:SQL 视图 —— 从 “复杂查询” 到 “一键复用”
  3. 知识点 2:SQL 索引 —— 让查询 “飞” 起来的优化工具
  4. 我的优秀项目:多场景视图 + 索引的联动实践
  5. 踩坑实录:从 “报错” 到 “精通” 的问题解决
  6. 学习总结:视图与索引的核心原则
  7. 互动投票:你最想优先掌握哪个技能?
  8. 提交成果物
二、学习背景:为什么学视图与索引?

在企业数据库中,视图是 “数据封装的利器”(避免重复写几百行关联查询),索引是 “性能优化的刚需”(当表有 10 万 + 数据时,无索引的查询可能卡半小时)。这两个技能是数据库操作从 “会用” 到 “用好” 的关键,也是面试高频考点。

三、知识点 1:SQL 视图 —— 从 “复杂查询” 到 “一键复用”

视图是虚拟表,基于 SQL 查询结果创建,本质是 “存储好的查询语句”,核心价值是简化操作、统一逻辑、权限控制

(1)视图的 3 类核心场景
场景作用我的实践案例
多表关联查询封装多表 JOIN 的复杂逻辑武汉行政部员工视图(关联 5 张表)
数据筛选固化筛选条件,避免重复写 WHERE高薪员工视图(筛选薪资 > 15000)
统计分析封装分组、聚合逻辑职位人数统计视图(按职位统计人数)
2)深度实践:武汉行政部员工视图(多表关联)

知识点 1:SQL 视图的创建与使用

学习过程:视图是虚拟表,基于 SQL 查询结果创建,可简化复杂查询、封装逻辑。

(1)创建视图的语法
CREATE VIEW 视图名 AS SELECT 列1, 列2... FROM 表名 [JOIN 关联表 ON 关联条件] [WHERE 筛选条件];
(2)实操案例:创建 “武汉行政部员工视图”

步骤:① 确定数据源:关联DMHR.EMPLOYEE(员工表)、DMHR.JOB(职位表)、DMHR.DEPARTMENT(部门表)、DMHR.LOCATION(地理位置表)、DMHR.CITY(城市表);② 写创建语句:

CREATE VIEW DMHR.V_WUHAN_ADMIN_EMPLOYEES AS SELECT E.EMPLOYEE_ID, -- 员工ID E.EMPLOYEE_NAME, -- 员工姓名 E.EMAIL, -- 邮箱 D.DEPARTMENT_NAME, -- 部门名称 J.JOB_TITLE, -- 职位 C.CITY_NAME -- 城市 FROM DMHR.EMPLOYEE E JOIN DMHR.JOB J ON J.JOB_ID = E.JOB_ID JOIN DMHR.DEPARTMENT D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID JOIN DMHR.LOCATION L ON L.LOCATION_ID = D.LOCATION_ID JOIN DMHR.CITY C ON L.CITY_ID = C.CITY_ID WHERE D.DEPARTMENT_NAME = '行政部' AND C.CITY_NAME = '武汉';

③ 查询视图(查看结果)

SELECT EMPLOYEE_ID AS 员工编号, EMPLOYEE_NAME AS 姓名, EMAIL AS 电子邮箱, DEPARTMENT_NAME AS 所属部门, JOB_TITLE AS 职务, CITY_NAME AS 办公城市 FROM DMHR.V_WUHAN_ADMIN_EMPLOYEES;

图片:

3)实操案例:创建 “高薪员工视图”

步骤:① 确定数据源:仅DMHR.EMPLOYEE(员工表);② 写创建语句(筛选薪资 > 15000 的员工):

CREATE VIEW DMHR.V_HIGH_SALARY_EMPLOYEES AS SELECT EMPLOYEE_ID, EMPLOYEE_NAME, EMAIL, JOB_ID, SALARY FROM DMHR.EMPLOYEE WHERE SALARY > 15000;

③ 查询视图:

SELECT EMPLOYEE_ID AS 员工编号, EMPLOYEE_NAME AS 员工姓名, EMAIL AS 电子邮箱, JOB_ID AS 职位ID, SALARY AS 薪资 FROM DMHR.V_HIGH_SALARY_EMPLOYEES;
(4)实操案例:创建 “职位人数统计视图”

步骤:① 关联表:DMHR.EMPLOYEE(员工表)与DMHR.JOB(职位表);② 写创建语句(按职位分组统计人数):

CREATE VIEW DMHR.V_JOB_EMPLOYEE_COUNT AS SELECT J.JOB_TITLE, -- 职位名称 COUNT(E.EMPLOYEE_ID) AS EMPLOYEE_COUNT -- 人数 FROM DMHR.EMPLOYEE E JOIN DMHR.JOB J ON E.JOB_ID = J.JOB_ID GROUP BY J.JOB_TITLE ORDER BY J.JOB_TITLE;

③ 查询视图:

SELECT JOB_TITLE AS 职位名称, EMPLOYEE_COUNT AS 人员数量 FROM DMHR.V_JOB_EMPLOYEE_COUNT;
三、知识点 2:SQL 索引的创建与优化

学习过程:索引是数据库优化工具,能加速查询(类似书籍目录),但会增加写入 / 更新的开销。

索引的 2 类常用类型
索引类型适用场景我的实践案例
B 树索引普通等值 / 范围查询(如 WHERE 列 = 值、列 > 值)员工表 DEPARTMENT_ID 的 B 树索引
位图索引列值重复度高的场景(如性别、部门 ID)员工表 DEPARTMENT_ID 的位图索引
(1)创建索引的语法
CREATE [UNIQUE] INDEX 索引名 ON 表名(列1, 列2...);
(2)实操案例:为员工表的DEPARTMENT_ID创建索引

步骤:① 确定优化场景:频繁按DEPARTMENT_ID查询员工,需加速;② 写创建语句:

CREATE BITMAP INDEX DMHR.IDX_EMPDEPT ON DMHR.EMPLOYEE(DEPARTMENT_ID);

③ 验证效果:查询部门 ID=104 的员工,索引会加速检索:

SELECT EMPLOYEE_ID, EMPLOYEE_NAME, PHONE_NUM, EMAIL FROM DMHR.EMPLOYEE WHERE DEPARTMENT_ID = 104;
(3)索引的 “避坑指南”
  • ❌ 不要给 “频繁更新的列” 建索引(比如员工的 “当前状态”,每次更新都会重建索引,开销大);
  • ❌ 不要给 “数据量小的表” 建索引(表只有 10 行,全表扫描比查索引更快);
  • ✅ 优先给 “查询条件中的列” 建索引(比如 WHERE、JOIN ON 后的列)。
四、我的优秀练习项目

项目:统计各职位的员工人数并排序我独立完成了 “职位人数统计视图” 的创建,核心代码(含分组、排序):

CREATE VIEW DMHR.V_JOB_EMPLOYEE_COUNT AS SELECT J.JOB_TITLE, COUNT(E.EMPLOYEE_ID) AS EMPLOYEE_COUNT FROM DMHR.EMPLOYEE E JOIN DMHR.JOB J ON E.JOB_ID = J.JOB_ID GROUP BY J.JOB_TITLE ORDER BY J.JOB_TITLE;

通过视图封装后,仅需简单查询就能得到清晰的统计结果,简化了重复操作。

五、学习问题与解决
遇到的问题报错信息解决过程经验总结
创建视图时权限不足ORA-01031: insufficient privileges联系 DBA 申请CREATE VIEW权限,同时学习视图的权限控制(可以给其他用户 “查询视图” 的权限,而不暴露原表)数据库操作前先确认权限,视图是 “权限隔离” 的好工具
多表关联出现笛卡尔积结果行数是原表行数的乘积检查 JOIN 条件:原来漏写了DMHR.LOCATIONDMHR.CITY的关联条件,补充ON L.CITY_ID = C.CITY_ID后解决多表关联时,每个表都要有对应的 JOIN 条件,避免 “无关联的表放在 FROM 后”
索引创建后查询没加速EXPLAIN显示还是全表扫描发现查询条件写的是DEPT_ID(别名写错了,实际列是DEPARTMENT_ID),修正列名后命中索引索引列要和查询条件的列完全一致,别名不影响索引匹配
六、总结
  1. 视图的核心价值:封装复杂查询、简化复用、统一数据逻辑
  2. 索引的核心价值:加速查询,但需权衡写入性能(避免过度创建);
  3. 实践技巧:创建视图前先测试基础SELECT语句,确保结果正确;创建索引后用EXPLAIN验证生效情况。
七、学习投票

你觉得哪个知识点更实用?(投票)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 11:50:22

22、Kubernetes 的滚动更新、可扩展性和配额管理

Kubernetes 的滚动更新、可扩展性和配额管理 在构建和管理系统时,资源的高效利用与系统的稳定性和可扩展性是需要平衡的重要方面。以下将详细探讨如何在 Kubernetes 环境中实现这一平衡,以及相关的优化和测试方法。 资源利用与容量规划 在资源利用方面,追求 99.99999% 的…

作者头像 李华
网站建设 2026/4/17 2:56:06

微博超话自动签到工具:2025年高效使用完全指南

微博超话自动签到工具:2025年高效使用完全指南 【免费下载链接】weibo_supertopic_sign 基于Python/Nodejs的微博超话签到脚本,支持云函数运行或青龙面板运行 项目地址: https://gitcode.com/gh_mirrors/we/weibo_supertopic_sign 还在为每天手动…

作者头像 李华
网站建设 2026/4/18 14:26:37

ios证书申请

1.首先要有自己的appid,然后一般都是公司有个自己term,要被邀请进去,进入开发者团队;不然看不见这个证书的内容,你也可以自己花钱开一个,就可以了;选择页面的 “Identifiers" 可查看到已申请的所有 App 应用标识&…

作者头像 李华