mariadb数据库给数据配置快捷键-视图和索引

yumo6663个月前 (03-23)技术文章40

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 更新视图

视图可以更新,但有一些限制: - 视图必须基于单个表。 - 视图不能包含聚合函数、DISTINCTGROUP BYHAVING等。

示例:

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';

相关文章

lazarus使用zeos连接sqlite数据库,实现主从表联动

使用sqlite必须指定sqlite的驱动文件位置,windows系统就是sqlite3.dll文件的位置,一般把这个文件放在程序目录下。Sqlite3.dll分64位和32位,根据你的程序选择对应的...