天天看点

MySQL数据库的优化的思路方式方法?

1数据库结构优化

a建表的时候优化:

列选择原则

1字段类型优先级:整形>date,time->char varchar->text、blob

2合理地设置字段大小够用就可以

3尽量不要用text类型

4尽量不用NULL() 索引NULL列需要额外的空间来保存

5对于非负型的数据 (如整型 IP) 来说,要优先用无符号整型来存储 无符号占多出一倍。

6同财务相关的金额类数据必须使用 decimal 类型。

b反范式设计表 目的–减少表的关联查询

方法->冗余字段(某字段存储另一表的统计信息)

冗余表(表中统计或汇总其他表的信息)

c将字段很多的表分解成多个表:对于使用频率低的字段分离出来形成新表。

d增加中间表

2查询语句优化

a 常见的查询优化

避免直接使用 select *

中 IN 包含的值不应过多

当只需要一条数据的时候,使用 limit 1

SQL 语句要避免造成索引失效的

如果排序字段没有用到索引,就尽量少排序

不建议使用%前缀模糊查询

b缓存优化 数据库打开了 Query Cache(简称 QC)功能

c读写分离 主数据库处理增、改、删操作,而从数据库处理查询操作。

d mysql的分库分表 垂直拆分(业务)与水平拆分(表ID)

f EXPLAIN

用 EXPLAIN 查看 SQL 执行计划,在查询语句中加入explain(解释)

查出来有一个重要的字段是type 表示表的连接类型

从最佳类型到最差类型 system const(理解为最佳) eq_ref 等等10个 直到all是最差。

3索引及优化

索引:提高数据查询的效率 就说是比如:然后说两条。

  1. 选择唯一性索引
  2. 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。
  3. 为经常需要排序、分组和联合操作的字段建立索引:
  4. 为常作为查询条件的字段建立索引。
  5. 限制索引的数目: 越多的索引,会使更新表变得很浪费时间。
  6. 尽量使用数据量少的索引
  7. 如果索引的值很长,那么查询的速度会受到影响。
  8. 尽量使用前缀来索引
  9. 如果索引字段的值很长,最好使用值的前缀来索引。
  10. 删除不再使用或者很少使用的索引
  11. 最左前缀匹配原则,非常重要的原则。
  12. 尽量选择区分度高的列作为索引
  13. 区分度的公式是表示字段不重复的比例
  14. 索引列不能参与计算,保持列“干净”:带函数的查询不参与索引。
  15. 尽量的扩展索引,不要新建索。

4服务器优化

配置较大的内存 配置高速磁盘(SSD等)

5存储引擎的选择优化

MyISAM 更适合读密集的表,而 InnoDB 更适合写密集的的表。