SQL一条语句的一生,mysql在8.0之后取消了程序缓存(影响性能),通过Parser(词法分析、语法分析)解析器和执行器,构建执行树,有执行器来执行。
逻辑架构
表在文件系统中的表示 2.3.1 InnoDB存储引擎模式
- 表结构
为了保存表结构, InnoDB 在 数据目录 下对应的数据库子目录下创建了一个专门用于 描述表结构的文 件 ,文件名是这样
表名.frm
.frm文件
的格式在不同的平台上都是相同的。这个后缀名为.frm是以 二进制格式 存储的,我们直接打开是乱码
的。
- 表中数据和索引
① 系统表空间( system tablespace)
默认情况下,InnoDB会在数据目录下创建一个名为 `ibdata1` 、大小为 12M 的文件,这个文件就是对应
的 系统表空间 在文件系统上的表示。怎么才12M?注意这个文件是 自扩展文件 ,当不够用的时候它会自
己增加文件大小。
当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的 `ibdata1` 这个文件名
难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小,比如我们这样修改一下my.cnf 配置
文件
[server] innodb_data_file_path=data1:512M;data2:512M:autoextend
② 独立表空间(file-per-table tablespace)
在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为 每 一个表建立一个独立表空间 ,也就是说我们创建了多少个表,就有多少个独立表空间。使用 独立表空间 来 存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表 名相同,只不过添加了一个 .ibd 的扩展名而已,所以完整的文件名称长这样:
表名.ibd
.ibd 文件就用来存储 test 表中的数据和索引。
Go学习
build | 构建编译包和依赖项
clean | 清除删除对象文件和缓存文件
doc | 文件显示包或符号的文档
env | 打印Go环境信息
fix | 修复更新包以使用新的API
fmt | 重新格式化包源
generate | 生成Go文件
get | 将依赖项添加到当前模块并安装
install | 编译和安装软件包和依赖项
list | 列出软件包或模块
mod | 模块维护
run | 编译并运行Go程序
test | 测试包
tool | 运行指定的go工具
version | 打印Go版本信息
vet | 报告包裹中可能存在的错误
获取字符串长度:len()函数
字符串遍历方式:
str := "hello"
for i := 0; i < len(str); i++ {
fmt.Println(i,str[i])
}
str := "hello"
for i,ch := range str {
fmt.Println(i,ch)
}
str1 := "hello "
str2 := " world"
//创建字节缓冲
var stringBuilder strings.Builder
//把字符串写入缓冲
stringBuilder.WriteString(str1)
stringBuilder.WriteString(str2)
//将缓冲以字符串形式输出
fmt.Println(stringBuilder.String())
- 字符串的strconv包:用于与基本类型之间的转换,常用函数有Append、Format、Parse
切片
var identifier []type
切片不需要说明长度, 或使用make()函数来创建切片:
var slice1 []type = make([]type, len)
也可以简写为
slice1 := make([]type, len)
创建:
/* 创建切片 */
numbers := []int{0,1,2,3,4,5,6,7,8}
Map
Map是Go语言的内置类型,将一个值与一个键关联起来,是一种无序的键值对的集合,可以使用相应的键检索值(类比Java中的Map来记)。
// 声明一个map类型,[]内的类型指任意可以进行比较的类型 int指值类型
m := map[string]int{"a":1,"b":2}
fmt.Print(m["a"])