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

yumo6661个月前 (03-23)技术文章18

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

相关文章

面试官:你们项目中用到多表关联了吗?

我们来看这样一个面试场景。面试官:“在你们的项目中,用到多表关联查询了吗?”候选人:“嗯,每个项目都用到了。”面试官听了似乎有些愤怒,说:“多表关联查询这么慢,为什么你们还要用它,那你们项目的性能如何...

thinkphp中是单个表挨个查询还是关联查询更好

在ThinkPHP中选择单表多次查询或关联查询需根据具体场景权衡,以下是关键考量因素及建议:一、单表多次查询的优势与适用场景高并发场景单表查询可减少数据库锁竞争和计算压力,尤其在QPS较高时(如上千级...

详谈 | 将一个千万级多表关联SQL执行时间从几十秒降到毫秒生产案例

前言写在前面的话,不论再小的业务系统,随着上线时间的推移,数据也会随之日渐增长,对各个业务场景的架构设计,时刻保持敬畏之心。尤其是在遇到 SQL 慢查询这类问题,不要“无脑”的看待它,要学会分析根因,...

当 PostgreSQL 数据库单表数据量达到 2000 万条时,对开发的影响

当 PostgreSQL 数据库单表数据量达到 2000 万条时,对开发的影响主要体现在以下几个方面,需要针对性优化:一、查询性能下降1、全表扫描风险问题:未建立索引的字段查询可能触发全表扫描,导致响...

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

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