mariadb数据库给数据配置快捷键-视图和索引
1.视图
1.1 什么是视图?
视图是基于SQL查询结果的虚拟表。视图本身不存储数据,而是存储查询逻辑。通过视图,可以简化复杂查询、隐藏数据细节、提供数据安全性。
场景:你家的电视有几百个频道,但每次你只想看「体育频道」和「电影频道」,于是你设置了一个「最爱列表」,一键直达这两个频道。
解释:
- 视图就是一张虚拟表,帮你筛选和简化数据。
- 比如:公司数据库里有所有员工的详细信息(工资、部门、电话等),但HR经理只需要看「姓名+部门」,就可以创建一个视图,屏蔽敏感信息。
- 本质是查询语句的封装:视图不存储数据,只是按规则展示数据(就像「最爱列表」不存节目,只是快速跳转)。
实际用处:
- 简化复杂查询:比如把多表关联的复杂查询存成视图,下次直接查视图。
- 数据权限控制:只让用户看到视图中的部分数据(比如销售只能看客户姓名,看不到手机号)。
1.2 创建视图
使用CREATE VIEW语句创建视图。
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
示例:
CREATE VIEW active_users AS
SELECT id, username, email
FROM users
WHERE status = 'active';
1.3 查询视图
视图可以像普通表一样查询。
SELECT * FROM view_name;
示例:
SELECT * FROM active_users;
1.4 更新视图
视图可以更新,但有一些限制: - 视图必须基于单个表。 - 视图不能包含聚合函数、DISTINCT、GROUP BY、HAVING等。
示例:
UPDATE active_users SET email = 'new_email@example.com' WHERE id = 1;
1.5 删除视图
使用DROP VIEW语句删除视图。
DROP VIEW view_name;
示例:
DROP VIEW active_users;
2.索引
2.1 什么是索引?
索引是数据库中用于加速数据检索的数据结构。索引类似于书籍的目录,可以快速定位数据。
场景:一本500页的百科全书,如果没有目录,找「光合作用」的解释得从第1页翻到第400页;有了目录,直接翻到第320页。
解释:
- 索引是数据的「快捷查找标签」,大幅加快搜索速度。
- 比如:数据库里存了100万用户,按「身份证号」建索引后,找某个用户就像查目录一样快。
- 代价:索引需要额外存储空间(像目录占用书的前几页),且新增/修改数据时要同步更新索引(像新加内容后要更新目录)。
实际用处:
- 加速查询:搜索、排序、筛选时更快(尤其数据量大时)。
- 注意:不是所有字段都要建索引,常用查询字段才需要(就像没必要给冷门词条加目录)。
2.2 创建索引
使用CREATE INDEX语句创建索引。
CREATE INDEX index_name ON table_name (column1, column2, ...);
示例:
CREATE INDEX idx_username ON users (username);
2.3 唯一索引
唯一索引确保列中的值唯一。
CREATE UNIQUE INDEX index_name ON table_name (column_name);
示例:
CREATE UNIQUE INDEX idx_email ON users (email);
2.4 删除索引
使用DROP INDEX语句删除索引。
DROP INDEX index_name ON table_name;
示例:
DROP INDEX idx_username ON users;
2.5 索引类型
mariadb支持多种索引类型:
- B-Tree索引:默认索引类型,适用于等值查询和范围查询。
- 哈希索引:适用于等值查询,不支持范围查询。
- 全文索引:适用于全文搜索。
2.6 索引优化
- 选择合适的列:为经常用于查询条件的列创建索引。
- 避免过多索引:过多的索引会增加写操作的开销。
- 使用复合索引:为多个列创建复合索引。
示例:
CREATE INDEX idx_name_age ON users (username, age);
3.视图与索引的结合使用
3.1 在视图上创建索引
mariadb不支持直接在视图上创建索引,但可以通过在基表上创建索引来优化视图查询。
示例:
CREATE VIEW active_users AS
SELECT id, username, email
FROM users
WHERE status = 'active';
CREATE INDEX idx_status ON users (status);
3.2 使用索引优化视图查询
通过为视图查询中使用的列创建索引,可以加速视图查询。
示例:
CREATE INDEX idx_username ON users (username);
SELECT * FROM active_users WHERE username = 'Alice';