前言:
设计表的时候尽量满足3NF(3范式)
- 1NF(无重复的列):即表的字段具有原子性,不可再分解,只要是关系型数据库则自动满足
- 2NF(无重复的行):即表的记录是唯一的,一张表有主键则保证了唯一性
- 3NF:即表中尽量不要有冗余数据,即表的其中某一信息能够被推导出来,就最好不要单独来一个字段存储
但是大多数的时候是满足不了3NF的,特别是1对多的情况下,每次都去算去推导其中一个数据,很耗性能,所有有时候会采用反3NF来设计表。
mysql设置
//可以查看整个mysql的一些状态,共有300多种状态数据
show global status
//其中:
//com_select 列数据显示一共查询了多少次
//slow_queries 列数据是慢查询的次数
//查看慢查询设置的默认时间(正常情况下是10s)
show variables like 'long_query_time'
//修改慢查询的默认时间(这里设置成1s)----需重新关掉连接再建立连接就可以查询是设置成1s了,但重启数据库又还原成默认值了
set long_query_time=1
//将 slow_query_log 全局变量设置为“ON”状态 --开启慢查询日志记录
set global slow_query_log='ON';
//设置慢查询日志存放的位置
set global slow_query_log_file='/var/lib/mysql/test-10-226-slow.log';
这样就可以查看哪些sql语句的执行时间超过1s了,然后单独进行优化
可以参考:
https://jingyan.baidu.com/article/454316ab07e522f7a7c03a2c.html