美文网首页
mysql的优化方案

mysql的优化方案

作者: yubook | 来源:发表于2019-07-14 14:42 被阅读0次

    为什么要优化Mysql

    1. 系统的吞吐量瓶颈往往出现在数据库的访问速度上,

    2. 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相 应变慢

    3. 数据是存放在磁盘上的,读写速度无法和内存相比

    如何优化,以及优化的方案

    1. 设计数据库时:数据库表、字段的设计,存储引擎
    2. 利用好MySQL自身提供的功能,如索引等
    3. SQL语句的优化(收效甚微)
    4. 横向扩展:MySQL集群、负载均衡、读写分离
    5. 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)

    数据库的设计

    1. 字段类型的选择,设计规范,范式,常见设计案例
    2. 原则:尽量使用整型表示字符串
    3. MySQL内部的枚举类型(单选)和集合(多选)类型
    4. 原则:定长和非定长数据类型的选择
    5. 原则:尽可能选择小的数据类型和指定短的长度
    6. 原则:字段注释要完整,见名知意
    7. 原则:单表字段不宜过多

    存储引擎选择

    1. Innodb不断完善,从各个方面赶超MyISAM,也是MySQL默认使用的

    索引

    • 关键字相对于数据本身,==数据量小==
    • 关键字是==有序==的,二分查找可快速确定位置
    • 普通索引(key),唯一索引(unique key),主键索引(primary key),全文索引(fulltext key)

    水平分割和垂直分割

    • 水平分割:通过建立结构相同的几张表分别存储数据

    • 垂直分割:将经常一起使用的字段放在一个单独的表中,分割后的表记录之间是一一对应关系

    • 集群

    1. 横向扩展:从根本上(单机的硬件处理能力有限)提升数据库性能 。由此而生的相关技术:==读写分离、负载均衡==

    数据库查询语句优化

    1. 避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
    2. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
    3. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。可以在查询为空的字段上设置默认值为0 这样的查询效率会比设置为null高
    4. in 和 not in 也要慎用,否则会导致全表扫描,如
      select id from t where num in(1,2,3)
      改成这样比较好一点
      select id from t where num between 1 and 3
    5. 用 exists 代替 in 是一个好的选择:
      select num from a where num in(select num from b)
      用下面的语句替换:
      select num from a where exists(select 1 from b where num=a.num)
    6. 尽量避免大事务操作,提高系统并发能力
    7. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
    8. 尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限
    9. 避免频繁创建和删除临时表,以减少系统表资源的消耗
    10. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
    11. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

    [文章借鉴] (https://www.nowcoder.com/discuss/150059?type=0&order=0&pos=13&page=0)

    相关文章

      网友评论

          本文标题:mysql的优化方案

          本文链接:https://www.haomeiwen.com/subject/gnbmkctx.html