面试宝典系列-mysql性能优化方案

表结构优化:sql

一、根据本身的业务选择合适的引擎数据库

二、表设计时尽可能符合第三范式性能

  • 第一范式:表的列的具备原子性,不可再分解,即列的信息,不能分解, 只有数据库是关系型数据库就自动的知足。
  • 第二范式:表中的记录是惟一的, 就知足第二范式, 一般咱们设计一个主键来实现
  • 第三范式:表中不要有冗余数据, 即表的信息,若是可以被推导出来,就不该该单独的设计一个字段来存放.

为何说尽可能符合?  由于有些系统为了提升运行效率,就必须下降范式标准,适当保留冗余数据。优化

三、表的字段尽量使用NOT NULL设计

四、若是知道字符串固定长度,那么就用char型,不要用varchar型索引

五、主从分离,读从库,写主库内存

六、当表的字段过多时,进行垂直分割;若是数据过多时,进行水平分割字符串

sql优化:性能分析

一、不使用Select *,只查询须要的字段,查询全部占用内存效率

二、多表链接时,尽可能小表驱动大表,即小表 join 大表

三、插入多条数据时,尽可能组合成一天sql批量插入

四、使用存储过程

五、使用枚举或整数代替字符串类型

六、开启慢查询,对慢sql使用explain或desc进行性能分析,并优化sql

索引优化:

  1. 索引并非越多越好,要根据查询有针对性的建立,考虑在WHERE和ORDER BY命令上涉及的列创建索引,可根据EXPLAIN来查看是否用了索引仍是全表扫描
  2. 应尽可能避免在WHERE子句中对字段进行NULL值判断,不然将致使引擎放弃使用索引而进行全表扫描
  3. 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段
  4. 字符字段只建前缀索引
  5. 字符字段最好不要作主键
  6. 不用外键,由程序保证约束
  7. 尽可能不用UNIQUE,由程序保证约束
  8. 使用多列索引时主意顺序和查询条件保持一致,同时删除没必要要的单列索引(最左匹配原则) 

 

相关文章
相关标签/搜索