一、数据库基本设计规范
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.性能瓶颈定位: