a: 表的设计合理
b: 添加适当的索引
c: 分表技术 (水平分表, 垂直分表)
d: 读写分离
e: 存储过程(已编译的sql语句,执行效率高)
f: mysql配置优化(通常会把mysql_conncetion的值设为1000左右)
g: mysql硬件升级
h: 定期对mysql数据库进行碎片整理(optimize table 表名);
数据库设计三范式
1NF:表的列具有原子性,即列信息不可再分
2NF: 表中的记录具有唯一性
3NF: 表中不要有冗余信息,比如可以通过其它字段推出来的信息就没必要单独设计一个字段存放
(但有时候,实际情况需要我们适当的反三FN)
定位慢查询
show sataus like 'uptime'//查看mysql服务启动时间
show status like 'com_select'//查看select语句查询次数
'com_update'
''com_delete'
'com_insert'
show [session|global] status,查看的数据是本次会话的还是所有记录
show status like 'connections' 查看当前mysql客户连接数
show status like 'slow_queries' 显示慢查询
show variables like 'long_query_time' 多少秒才认为是慢查询
set long_query_time = 1 认为超过一秒即为慢查询.
索引:
查询:
show index from 表名
show keys form 表名
添加:
alter table 表名 add primary key(表的列名) 添加主键索引
alter table 表名 add unique key(表的列名) 添加唯一索引
alter table 表名 add key(表的列名) 添加普通索引
在使用索引查询中需要特别注意的事情
如果where条件语句后有or关键字,那么两个字段都必须是有索引,否则它们两个都不会使用索引。