3.2 INDEX、VIEW 与 FUNCTION
除了表,数据库里还会有索引、视图、函数等对象。它们能让查询更快、更清晰,或把一部分逻辑放在数据库侧。
INDEX
索引帮助数据库更快找到行:
sql
CREATE INDEX idx_students_email
ON students (email);如果常常用 WHERE email = ? 查学生,给 email 建索引可能有效。
但索引不是免费午餐:
- 需要额外存储空间。
- 插入、更新、删除时需要维护索引。
- 索引过多会拖慢写入。
- 不匹配查询条件的索引可能没有帮助。
正在加载概念检查...
VIEW
视图是保存起来的查询定义:
sql
CREATE VIEW student_course_summary AS
SELECT s.student_id, s.name, c.title
FROM students AS s
JOIN courses AS c
ON c.course_id = s.course_id;之后可以像查表一样查:
sql
SELECT *
FROM student_course_summary;视图适合隐藏复杂 JOIN、统一报表口径、限制暴露列。
注意
产品差异提醒:普通 VIEW 通常保存查询定义,不一定保存物理结果。Materialized View 是另一类对象,PostgreSQL、Oracle 等支持;MySQL 没有同样的内置物化视图语法;SQL Server 有 indexed view 但限制较多。
FUNCTION
数据库函数可以封装计算逻辑,比如把分数转换成等级。但函数语法高度产品相关。
注意
产品差异提醒:PostgreSQL 可以用 SQL、PL/pgSQL 等语言定义函数;MySQL 有自己的
CREATE FUNCTION 语法;SQL Server 常用 T-SQL 标量函数或表值函数;Oracle 使用 PL/SQL。不要把某个产品的函数语法当作通用 SQL。正在加载交互实验...
正在加载概念检查...
何时把逻辑放进数据库
适合放进数据库的逻辑:
- 数据完整性约束。
- 需要所有应用共享的简单规则。
- 和查询紧密相关的计算。
不一定适合放进数据库的逻辑:
- 变化频繁的业务流程。
- 需要复杂外部服务调用的逻辑。
- 团队不熟悉且难测试的存储过程。
正在加载本节练习...