zoukankan      html  css  js  c++  java
  • mysql的优化总结

    一。数据库设计方面

    1)遵循数据库设计三大范式 ,适当的进行反范式设计

    第一范式:1NF 原子性 字段不能再拆分

    第二范式: 2NF 先满足第一范式 主键之外的要完全依赖于主键,消除了部分依赖

    第三范式 :3NF 先满足第二范式 完全消除传递依赖

    反范式设计:允许部分冗余字段,目的为了避免多表查询,提高查询速度

    优点:查询速度快      缺点:冗余字段多维护起来成本高

    范式优点:方便维护    缺点:查询速度不如反范式

    2)设计字段的时候尽可能使用小的字段,比如varchar  tinyint

    3)选择合适的mysql引擎  两个引擎的区别(重点)

    1>存储类型的区别 myisam frm 表结构文件 myd数据文件 myi索引文件      innodb  frm  ibd 数据索引共用一个表空间

    2>myisam读的效率高,不支持事务  表锁    innodb支持事务  支持行锁

    一般数据是插入和查询使用myisam引擎 ,删除和修改使用innodb引擎

    3>mysql5.5以后默认引擎是innodb

    4>mysql5.7以后innodb支持全文索引   之前版本不支持

    事务:(acid特性)

    原子性  一致性  隔离性  持久性

    四个隔离级别:读未提交(脏读)     读提交(不可重复读)   重复读(幻读)   序列化(解决幻读  脏读 不可重复读 但是消耗比较大,一般不用)

    4)数据表 可以加数据库名为前缀  我们的字段可以加数据表名为前缀,字段起名要有意义,可以使用简称

    二。sql语句的优化

    1)可以适当的添加索引 但是要注意引起索引失效的几种情况

    1>like条件 模糊查询 两个%会导致索引失效

    解决方法:只要保证左边没有%号即可

    2>索引字段不要使用运算及函数

    3>设计表字段的时候  类型是字符串  走索引      如果是int类型   不走索引

    4>最左原则 查询过程中条件必须包含最左的一个,否则索引失效

    5>避免使用or 否则索引失效

    2)开启慢查询

    我们不断的在执行sql语句  记录下查询时间超过2秒或者指定时间的sql语句  将这些sql语句写入日志  接下来我们对日志文件中的sql语句  进行 explain 或者 desc分析

    slow_query_log=on                开启慢查询

    slow_query_log_file=slow.log    查询超过2秒的sql语句  记录到这里

    long_query_time=1                记录查询超过1秒的sql语句

    log_queries_not_using_indexes     记录查询没有使用到索引的sql语句

    3)2000条数据是个界限  2000条范围之内  不用添加索引

    4)如果数据量大,不要在sql语句上进行复杂的逻辑运算,避免使用视图 触发器 存储

    5)多表联合查询  尽量避免嵌套查询  in   尽量使用inner join  左连接  右链接

    三。架构方面的优化(了解知道)

    1>采用分布式 读写分离

    2>大表可以 使用 分库分表 (横向分表 纵向分表)

    3>mysql分区  物理形态上分成五个分区 对于用户来讲 还是当成一张表来对待 再创建表的时候进行分区

    4>大型的数据采用数据库中间件  帮你解决数据库数据导入备份  分表分区监控

    东方通   360  百度

    5>使用redis 进行数据库的缓存  减轻mysql 的压力   提高查询的速度

    四。硬件方面的优化

    1>使用固态硬盘

    2>增加带宽

    3>增加内存

    4>扩充 数据库服务器的数量

    补充说明:*视图 也叫临时表  把经常通过where条件查询的数据放到临时表中 下次 直接从临时表读取 避免过多的损耗数据库

    *mysql 存储 存储代码段 经常用它 批量插入数据

    mysql触发器 一般用于 表备份  如果一张表 发生修改  同时将修改的内容同步到 另外一张表中 

     

     
     
     
  • 相关阅读:
    设计模式:迭代器模式
    设计模式:观察者模式
    设计模式:解释器模式
    设计模式:策略模式
    设计模式:状态模式
    设计模式:代理模式
    strtok函数
    人们眼中的程序员
    如何用C语言获取文件的大小
    C++著名库的比较和学习经验
  • 原文地址:https://www.cnblogs.com/aibabel/p/11710555.html
Copyright © 2011-2022 走看看