数据库优化
SQL语句优化
*1.开启慢查询日志,通过慢查询日志分析工具(mysqldumpslow, pt-query-digest) 分析
*2.使用explain查询sql的执行计划
count(*),count(id), 前者会统计出字段为null的数量,后者不会统计null的数量
*3.使用连接查询优化子查询
sql及索引优化
如何建立索引?
*1.在where从句,group by从句,order by从句,on 从句出现的列
*2.索引字段越小越好(数据存储单位以页为单位,一页中所能存储数据越多,一次I/O获取到的数据量越大,I/O效率高)
*3.离散度大的列放到联合索引前面
索引维护
重复索引:如主键列再建个unique索引
冗余索引:如联合索引再将主键列包含进去(key(name, id)),对于innodb来说每一个索引后面都会包含主键,查看冗余索引
select
a.TABLE_SCHEMA AS '数据名',
a.TABLE_NAME AS '表名',
a.INDEX_NAME AS '索引1',
b.INDEX_NAME AS '索引2',
a.COLUMN_NAME as '重复列名'
from STATISTICS a JOIN STATISTICS b ON
a.TABLE_SCHEMA = b.TABLE_SCHEMA
AND a.TABLE_NAME = b.TABLE_NAME
AND a.SEQ_IN_INDEX = b.SEQ_IN_INDEX
AND a.COLUMN_NAME = b.COLUMN_NAME
数据库表结构优化
1.选择合适的数据类型
2.范式和反范式
3.表的垂直拆分 将有很多列的表拆成多个表(不常用字段放一个表中;大字段独立放一个表中;经常一起用的放一起)
4.水平拆分 解决数据量过大问题(上亿条)
系统优化
1.操作系统优化
2.mysql配置优化
服务器硬件优化
1.Mysql有一些工作只能用到单核CPU