MySQL如何优化

MySQL优化通常有几种方式:

  1. 表的设计合理化(符合3NF)
  2. 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]
  3. SQL语句优化
  4. 分表技术(水平分割、垂直分割)
  5. 读写[写: update/delete/add]分离
  6. 存储过程 [模块化编程,可以提高速度]
  7. 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ]
  8. mysql服务器硬件升级
  9. 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)

数据库的设计

什么是数据库范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

数据库三大范式

第一范式:1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解;(只要是关系型数据库都满足1NF)

第二范式:2NF是对记录的惟一性约束,表中的记录是唯一的, 就满足2NF, 通常我们设计一个主键来实现,主键不能包含业务逻辑。

第三范式:3NF是对字段冗余性的约束,它要求字段没有冗余。 没有冗余的数据库设计可以做到。

但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。

具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。

SQL优化

如何从一个大项目中,迅速的定位执行速度慢的语句. (定位慢查询)

show status

使用show status使用show status查看MySQL服务器状态信息

常用命令

--mysql数据库启动了多少时间
show status like 'uptime';

show  stauts like 'com_select'  
show stauts like 'com_insert' ...类推 update  delete(显示数据库的查询,更新,添加,删除的次数)

show [session|global] status like .... 如果你不写  [session|global] 默认是session 会话,指取出当前窗口的执行,如果你想看所有(从mysql 启动到现在,则应该 global)

//显示到mysql数据库的连接数
show status like  'connections '; 

//显示慢查询次数
show status like 'slow_queries';

慢查询

什么是慢查询

MySQL默认10秒内没有响应SQL结果,则为慢查询。
可以去修改MySQL慢查询默认时间

如何修改慢查询

查询SQL

--查询慢查询时间
show variables like 'long_query_time';

--修改慢查询时间
set long_query_time=1; ---但是重启mysql之后,long_query_time依然是my.ini中的值

未完待续...

你可能感兴趣的:(MySQL如何优化)