news 2026/5/11 2:15:31

一课一得: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/5/11 1:27:11

10倍加速+256K上下文:Qwen3-Next-80B-A3B重新定义大模型效率标准

10倍加速256K上下文:Qwen3-Next-80B-A3B重新定义大模型效率标准 【免费下载链接】Qwen3-Next-80B-A3B-Thinking Qwen3-Next-80B-A3B-Thinking 在复杂推理和强化学习任务中超越 30B–32B 同类模型,并在多项基准测试中优于 Gemini-2.5-Flash-Thinking 项…

作者头像 李华
网站建设 2026/5/9 3:38:10

21、Kubernetes滚动更新、可扩展性与配额管理

Kubernetes滚动更新、可扩展性与配额管理 在Kubernetes的使用过程中,滚动更新、可扩展性以及资源配额管理是非常重要的方面,下面将详细介绍相关内容。 滚动更新与自动伸缩 在某些情况下,尽管实际CPU利用率为零或接近零,副本数量本应缩减至两个,但由于水平Pod自动伸缩器…

作者头像 李华
网站建设 2026/5/3 21:58:37

29、定制 Kubernetes:API 与插件深度解析(上)

定制 Kubernetes:API 与插件深度解析(上) 在当今的云计算和容器编排领域,Kubernetes 无疑占据着核心地位。它强大的功能和高度的灵活性,使得开发者能够高效地管理和部署应用程序。本文将深入探讨 Kubernetes 的 API 和插件相关内容,帮助你更好地掌握和定制这个强大的平台…

作者头像 李华
网站建设 2026/5/3 1:15:16

企业级数据采集系统选型指南:从技术架构到实践应用的全景解析

在数字化转型浪潮席卷全球的今天,数据已成为企业的核心资产。然而,许多企业在数据价值挖掘的起点——数据采集环节,就面临着严峻挑战。业务系统孤岛林立,数据格式千差万别,实时性要求日益增高,海量数据吞吐…

作者头像 李华
网站建设 2026/5/10 0:43:36

Typora

痛点分析代码块语法高亮支持有限,部分语言识别不准确大段代码粘贴时格式容易错乱,缩进丢失代码块无法直接执行或调试,需依赖外部工具导出PDF/HTML时代码样式可能发生变化跨平台使用时代码块渲染效果不一致语法高亮优化方案安装第三方语法高亮…

作者头像 李华