mysql 数据库优化

时间:2022-09-20 23:52:18

数据库优化

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