前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL进阶

MySQL进阶

作者头像
TagBug
发布2023-03-17 11:42:06
7220
发布2023-03-17 11:42:06
举报
文章被收录于专栏:TagBug

存储引擎、索引、视图

# MySQL 进阶

# 存储引擎

体系结构:连接层、服务层、引擎层、存储层

存储引擎选择语法

代码语言:javascript
复制
SHOW ENGINES;
CREATE TABLE XXX(...) ENGINE = INNODB;

存储引擎特点

INNODB 与 MyISAM:事务、外键、行级锁

  • InnoDB:是 Mysql 的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么 InnoDB 存储引擎是比较合适的选择。
  • MyISAM(现在一般用 MongoDB):如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。
  • MEMORY(现在一般用 Redis):将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY 的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。

存储引擎应用

INNODB:存储业务系统中对于事务、数据完整性要求较高的核心数据。

MyISAM:存储业务系统的非核心事务。

# 索引

索引优缺点

优势

劣势

提高数据检索的效率,降低数据库的 IO 成本

索引列也是要占用空间的。

通过索引列对数据进行排序,降低数据排序的成本,降低 CPU 的消耗。

索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行 INSERT、UPDATE、DELETE 时,效率降低。

索引结构

索引结构

描述

B+Tree 索引

最常见的索引类型,大部分引擎都支持 B+树索引

Hash 索引

底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询

R-tree(空间索引)

空间索引是 MyISAM 引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少

Full-text(全文索引)

是一种通过建立倒排索引,快速匹配文档的方式。类似于 Lucene,Solr,ES

# 索引分类

分类

含义

特点

关键字

主键索引

针对于表中主键创建的索引

默认自动创建,只能由一个

PRIMARY

唯一索引

避免同一个表中某数据列中的值重复

可以有多个

UNIQUE

常规索引

快速定位特定数据

可以有多个

全文索引

全文索引查找的时文本中的关键词,而不是比较索引中的值

可以有多个

FULLTEXT

在 InnoDB 存储引擎中,根据索引的存储形式,又可以分为以下两种:

分类

含义

特点

聚集索引 (Clustered Index)

将数据存储和索引放到了一块,索引结构的叶子节点保存了行数据

必须有,而且只有一个

二级索引 (Secondary Index)

将数据于索引分开村塾,索引结构的叶子节点关联的是对应的主键

可以存在多个

聚集索引选取规则:

  1. 如果存在主键,主键索引就是聚集索引。
  2. 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
  3. 如果表没有主键,或没有合适的唯一索引,则 InnoDB 会自动生成一个 rowid 作为隐藏的聚集索引。

# 索引设计原则

  1. 针对于数据量较大,且查询比较频繁的表建立索引。
  2. 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引。
  3. 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。
  4. 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。
  5. 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
  6. 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。
  7. 如果索引列不能存储 NULL 值,请在创建表时使用 NOT NULL 约束它。当优化器知道每列是否包含 NULL 值时,它可以更好地确定哪个索引最有效地用于查询。

# SQL 优化

[待补充…]

# 视图

# 语法

创建

代码语言:javascript
复制
CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION]

查询

代码语言:javascript
复制
查看创建视图的语句:
SHOW CREATE VIEW 视图名称;
查看视图数据(同查表):
SELECT * FROM 视图名称...;

修改

代码语言:javascript
复制
方式一(同创建视图语法):
CREATE OR REPLACE VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION]
方式二:
ALTER VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION]

删除

代码语言:javascript
复制
DROP VIEW [IF EXISTS] 视图名称[, 视图名称]...;

# 检查选项

代码语言:javascript
复制
...[WITH [CASCADED | LOCAL] CHECK OPTION]

当使用 WITH CHECK OPTION 子句创建视图时,MySQL 会通过视图检查正在更改的每个行,例如插入,更新,删除,以使其符合视图的定义。MySQL 允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,mysql 提供了两个选项:CASCADED 和 LOCAL,默认值为 CASCADED。

CASCADED:当一个视图是基于另一个视图创建时,CASCADED 选项会检查所有向下关联的视图的限制,即使所依赖的视图没有定义 CHECK OPTION

LOCAL:当一个视图是基于另一个视图创建时,LOCAL 选项会检查所有向下关联的视图的限制,如果所依赖的视图没有定义 CHECK OPTION,则不检查对应的视图限制

# 更新条件

要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一 项,则该视图不可更新:

  1. 聚合函数或窗口函数(SUM ()、 MIN ()、 MAX ()、 COUNT () 等)
  2. DISTINCT
  3. GROUP BY
  4. HAVING
  5. UNION 或者 UNION ALL

# 视图的作用

  1. 简单 视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
  2. 安全 数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据
  3. 数据独立 视图可帮助用户屏蔽真实表结构变化带来的影响。

MySQL 数据库

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-112,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # MySQL 进阶
    • # 存储引擎
      • # 索引
        • # 索引分类
        • # 索引设计原则
      • # SQL 优化
        • # 视图
          • # 语法
          • # 检查选项
          • # 更新条件
          • # 视图的作用
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档