构建高性能可扩展数据库

时间:2022-01-03 19:04:51

 

一、数据库基本设计规范

1.数据库对象的命名规范要做到见名识义

2.所有存储相同数据的列名和列类型必须一致

3.禁止在数据库中存储图片,文件等二进制数据(因为比较大);

禁止在线上做数据库压力测试;

禁止从开发环境和测试环境直连生产环境数据库(因为这会对生产环境的数据库造成破坏,这点非常重要)

 

二、索引设计规范

索引是一把双刃剑,好的索引可以提高数据库性能,但滥用索引也会造成性能下降

1.记住不要滥用索引,单表索引最好不要超过5个 (索引并不是越多越好)

2.Innodb是一种索引组织表,每个innodb表都应该有一个主键。一般就可以使用数据库自增的id为主键。

 

常见问题:

我们应该在哪些列上建立索引?

1. 包含SELECT、 DELETE、 UPDATE语句的WHERE从句中的列包含在ORDER BY 、GROUP BY、 DISTINCT中的字段

2.多表JOIN的关联列

 

三、数据库字段设计规范

1.要优先选择符合存储的最小的数据类型:将字符串转换为数字类型存储

 

四、sql的执行计划

执行计划的查看是进行数据库的sql语句调优时依据的一个重要依据。sql的执行计划可以告诉我们mysql优化器如果执行我们的sql请求,具体包括:

1.SQL如何使用索引

2.联接查询的执行顺序

3.查询扫描的数据行数 (看sql有没有使用正确的索引)

sql执行时不一定会按照我们写的sql顺序进行关联,有时候会根据索引,来改变顺序

 

 

五、MySQL优化

mysql优化常用步骤:

1)利用一些Linux常用的命令来查看Mysql对服务器的CUP和I/O使用情况,

2)通过慢查询日志找出有待优化的sql,

3)通过show processlist查看正在执行的sql的情况以及及时kill死锁的sql,

4)通过EXPLAIN分析需要优化的sql语句。当然也对Mysql内部配置做了一些调整。

 

使用 explain 分析 SQL 执行情况。

explain select * from ip;

+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-------+ | 1 | SIMPLE | ip | ALL | NULL | NULL | NULL | NULL | 400 | NULL | +----+-------------+-------+------+---------------+------+---------+------+------+-------+

select_type table type possible_keys key key_len rows Extra
表示查询的类型 输出结果集的表 表示表的连接类型 表示查询时,可能使用的索引 表示实际使用的索引 索引字段的长度 扫描出的行数(估算的行数) 执行情况的描述和说明

1.性能瓶颈定位: