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

MySQL 小览

作者头像
MickyInvQ
发布2020-11-24 14:41:54
3580
发布2020-11-24 14:41:54
举报
文章被收录于专栏:InvQ的专栏InvQ的专栏

MySQL介绍

什么是MySQL?

一个轻量级的关系型数据库

为什么使用MySQL?

开源免费,高性能,稳定性高,易维护

MySQL基础架构

在这里插入图片描述
在这里插入图片描述

查询执行计划

在这里插入图片描述
在这里插入图片描述

常用存储引擎

在这里插入图片描述
在这里插入图片描述

myisam

表锁 不支持事务 非簇表

在这里插入图片描述
在这里插入图片描述

innodb

行锁 支持4种隔离级别事务(MVCC) 簇表

在这里插入图片描述
在这里插入图片描述

archive

zlib压缩 只支持SELECT和INSERT

基础概念

MySQL 数据库,物理存在的操作系统文件集合

MySQL Server,管理MySQL数据的系统

MySQL 实例,MySQL进程以及其持有的内存结构,IP:PORT

SQL (Structured Query Languange)

DDL(Data Defination Language)

create table xxx alter table xxx drop table xxx

online DDL

  1. MySQL 5.6以上支持在线DDL,但字符串长度在256前后变更,导致写锁
  2. 请让DBA使用percona-toolkit(PT)执行
  3. 请在低峰执行

DML(Data Manipulation Language)

CURD语句: Replace into xxx Insert Ignore into xxx

InnoDB索引

B+树

聚簇索引 优点:主键范围扫描 缺点:更新成本相对较高

索引场景

  1. 前导列(最左前缀原则)
  2. 索引列上范围查找
  3. 复合索引

Explain

EXPLAIN SELECT XXXX

代码语言:javascript
复制
select employees.* from employees where emp_no in 
    (select emp_no from dept_emp where dept_no = 'd001') ;
在这里插入图片描述
在这里插入图片描述

show warngings 可以查询优化器优化之后的SQL

id: 执行顺序(ID相同,从上往下) type: ALL->index->range->ref->eq_ref->const,system->null rows: 预估需要扫描的行数 possible keys:可能使用的索引 key:实际使用的索引

自增主键

auto_increment_offset 偏移量 auto_increment_increment 自增值 (默认6字节整形)

简单全局唯一ID

代码语言:javascript
复制
create table sequence(id int unsigned not null);
insert into sequence values(0);
update sequence set id = last_insert_id(id + 1);
select last_insert_id();

字符集

统一设置UTF8/UTF8MB4(MySQL 5.5+)

代码语言:javascript
复制
show character set;

校对规则 默认: utf8_general_ci 不区分大小写 utf8_bin:区分大小写(select * from test where region='cn' collate utf8_bin;)

设计规范

  1. 自增ID主键
  2. 设置default not null
  3. 必须设置默认值
  4. 软删除代替硬删除
  5. 使用update_time on update current_timestamp
  6. 字段注释
  7. 避免表名过长(部分DBA工具限制)

安全

权限: 申请适当权限(CURD)

代码语言:javascript
复制
grant select , update , delete on employees
    to test_rw@'127.0.0.1'  identified by 'test123' ;

SQL注入: 使用占位参数化查询

慢查询

开启慢查询

代码语言:javascript
复制
mysql> show variables like 'slow_query%' ;
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_query_log      | ON                                   |
| slow_query_log_file | /usr/local/mysql/data/slow-query.log |
+---------------------+--------------------------------------+
代码语言:javascript
复制
mysql> show variables like 'long_query_time' ;
+-----------------+----------+
| long_query_time | 0.500000 |
+-----------------+----------+

分析慢查询

代码语言:javascript
复制
# User@Host: root[root] @ localhost [127.0.0.1]  Id:     2
# Query_time: 2.397048  Lock_time: 0.001538 Rows_sent: 1  Rows_examined: 10810030
SET timestamp=1566225900;
select count(*) from employees;
# User@Host: test_rw[test_rw] @ localhost [127.0.0.1]  Id:    17
# Query_time: 2.410302  Lock_time: 0.000069 Rows_sent: 2188111  Rows_examined: 2188111
SET timestamp=1566230367;
select *from employees;

使用mysqldumpslow分析慢查询

查询时间最长:mysqldumpslow -s t -t 1 /usr/local/mysql/data/slow-query.log

在这里插入图片描述
在这里插入图片描述

事务和锁

事务的ACID

原子性,一致性,隔离性,持久性

隔离级别

  1. read uncommitted
  2. read committed
  3. repeatable read
  4. serializable

多版本并发控制(MVCC)

  1. InnoDB multiversion concurrency control (MVCC)
  2. 快照读
  3. 版本链
  4. read view

InnoDB锁

表锁

1.读锁: lock tables [table _name] read; 2. 表锁:lock tables [table_name] write; 3.全局: flush tables with read lock; 4.释放锁:unlock tables;

行锁

1.记录锁(record lock) 2. 间隙锁(gap lock) 3. next key锁

死锁

1.禁止抢占 2.持有和等待 3.互斥 4循环等待

MySQL监控

参数和运行状态

  1. show variables like ‘%参数%’;
  2. show full processlist;
  3. show engine innodb status

性能

  1. show global status like ‘com_%’
  2. show global status like ‘select%’
  3. information_schema.tables

常见问题

too many connections

  1. 查看当前连接数 show global variables like ‘Threads_connected’;
  2. show full processlist ;
  3. 修改最大连接数max_connections

MySQL has gone away

  1. show variables like ‘wait_timeout’ ;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-11-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL介绍
    • 什么是MySQL?
      • 为什么使用MySQL?
      • MySQL基础架构
      • 查询执行计划
      • 常用存储引擎
        • myisam
          • innodb
            • archive
            • 基础概念
            • SQL (Structured Query Languange)
              • DDL(Data Defination Language)
                • online DDL
                  • DML(Data Manipulation Language)
                  • InnoDB索引
                    • B+树
                      • 索引场景
                      • Explain
                        • 自增主键
                          • 简单全局唯一ID
                          • 字符集
                          • 设计规范
                          • 安全
                          • 慢查询
                            • 开启慢查询
                              • 分析慢查询
                                • 使用mysqldumpslow分析慢查询
                            • 事务和锁
                              • 事务的ACID
                                • 隔离级别
                                  • 多版本并发控制(MVCC)
                                  • InnoDB锁
                                    • 表锁
                                      • 行锁
                                        • 死锁
                                        • MySQL监控
                                          • 参数和运行状态
                                            • 性能
                                            • 常见问题
                                              • too many connections
                                                • MySQL has gone away
                                                相关产品与服务
                                                云数据库 SQL Server
                                                腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                                                领券
                                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档