数据库优化—— MySQL介绍

Posted 凉城旧巷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库优化—— MySQL介绍相关的知识,希望对你有一定的参考价值。

目录

mysql介绍

一、MySQL版本

1、mysql主流版本

mysql 5.6 5.6.36 5.38 5.6.40
mysql 5.7 5.7.18 5.7.20 5.7.22

2、版本选择

企业版本选择:6~12月份的GA版本

二、MySQL连接与实例

1、MySQL的C/S结构

# 两种连接方法
TCP/IP  :    可以连接远程,也可以本地连接
SOCKET  :    连接本地
mysql -uroot -poldboy123 -h 10.0.0.200 -P3306
mysql -uroot -poldboy123 -S /tmp/mysql.sock 

2、MySQL实例

实例 = mysqld + 内存结构

实例 = mysqld + master thread + N Thread + 内存结构

三、mysql三层结构

1、连接层(连接上数据库)

(1)提供链接协议(TCP,SOCKET)

(2)用户验证

(3)提供专用链接线程,每登录一个用户,就会起一个专用的线程

2、SQL层(从哪里获取数据)

(1)接受上层的命令

(2)语法检测

(3)语义(什么类型增删改查?)、权限检测

(4)专用解析器解析SQL,解析成多种执行计划

(5)优化器:选择一个代价最低的执行计划

(6)执行器:按照优化器的选择,执行SQL语句,得出获取数据方法

(7)查询缓存:默认是关闭的,一般会使用redis产品替代

(8)记录日志:二进制日志

3、存储引擎层(获取数据,结构化成表)

按照SQL层结论,找相应数据,结构化成表的形式

四、MySQL的逻辑结构

1、库

存储数据的地方,包括库名、属性

2、表(二维表)

包括元数据(表名,表的属性,列,记录)

五、SQL语句

1、类型

DDL数据定义语言

DCL数据 控制语言

DML数据操作语言

DQL数据查询语言

2、SQL操作的对象

SQL操作的书库和表

3、SQL语句之DDL规范

(1)库定义

CREATE DATABASE
SHOW DATABASES
DROP DATABASE

a. 关键字大写,字面量小写

CREATE DATABASE bbs CHARSET utf8mb4

b. 库名只能小写,不能是数字开头,不能为预留关键字

c. 库名和业务名有关,例如:blog_user

d. 必须加字符集CHARSET utf8mb4

(2)表定义

CREATE TABLE
DROP TABLE
ALTER TABLE

a. 关键字大写(非必须),字面名小写(必须)

b. 表名必须小写,不能是数字开头,不能为预留关键字

c. 表名和业务名有关

d. 必须加存储引擎和字符集

f. 必须有主键: PRIMARY KEY

g. 合适的数据类型

h. 必须加注释:COMMENT ‘用户名‘

i. 尽量避免外键

j. 建立合理的索引

4、SQL语句之DCL规范

grant
revoke
lock

5、SQL语句之DML规范

insert
update
delete

a. insert 语句按批量插入数据

b. update 必须加 where 条件

c. delete 尽量替换为update,如添一个状态量字段 state

d. 如果有清空全表的需求,使用 truncate

6、SQL语句之DQL规范

select
show

a. select 语句避免使用select * from t1;,使用select id,name from t1;

b. select 语句尽量加等值的where条件,select id,name from t1 where age>20;

c. select 语句对于范围查询,select 语句对于范围查询,例如 :select * from t1 where id>200; 尽量添加 limit 或者 id>200 and id<300 union all id>300 and id<400

d. select 的where 条件,不要使用 <> like ‘%name‘ not in not exist

e. 不要出现3表以上的表连接,避免子查询

f. where条件中不要出现函数操作


以上是关于数据库优化—— MySQL介绍的主要内容,如果未能解决你的问题,请参考以下文章

数据库优化—— MySQL介绍

部分代码片段

MySql介绍及优化

MySQL存储优化和数据库结构优化

使用 C++ 反转句子中的每个单词需要对我的代码片段进行代码优化

如何优化C ++代码的以下片段 - 卷中的零交叉