zoukankan      html  css  js  c++  java
  • mysql性能优化

    性能优化

    myql数据库优化的原则:

    1.减少系统的瓶颈。

    2.减少资源的占用。

    3.增加系统的反应速度。

    优化查询

    1.索引对查询的影响

    比如有一个表student表,有id、name、sex、no,4个字段,里面有20条记录,如果没有索引时,查询no=20的学生。

    sql语句是SELECT * from student WHERE no ='20'。分析当前sql :执行 explain SELECT * from student WHERE no ='20'

     

    这样可以看到rows是20,也就是说查询扫描了20条记录。

    • select_type:SIMPLE,这个不是很关键,只是表示这是一次简单的查询,没有join,没有union,没有中间表
    • type:ALL,表示该次SQL进行了全表查询

    在no字段使用索引后

    看到结果是1,证明查询的时候只扫描了一条记录。查询速度自然比不使用索引快。而且possible_keys和key都可以说明使用了索引。

    2.使用索引查询

    (1)使用like查询时

    如果第一个字符是%,索引不起作用,只要%不在第一位置索引才起作用。

    (2)使用多列索引查询

    mysql可以为多个字段创建索引,一个索引可以包含16个字段,只有查询条件中使用了这些字段的第一个字段时,索引才有用。

    (3)使用or关键字查询

    查询条件只有or关键字,且or前后两个条件都是索引时,查询才会使用索引。

    3.避免使用select *

    查询内容越多,自然越慢。

    4.永远为每张表设置一个id

    表里设置一个id作为主键,最好是int类型,并加上自增标识。使用varchar当做主键会使性能下降。

    数据库结构优化

    1.将字段很多的表分解为多个表

    对于字段很多的表,如果有些字段使用的频率很低,可以将这些字段分离出来形成新表。因为一个表数据量很大时,会由于使用频率低的字段存在而变慢,通过分解字段,可以提高表的查询效率。

    2.增加中间表

    对于需要经常联合查询的表,可以建立中间表以提高查询的效率。把经常要联合查询的数据插入到中间表,然后将原来联合查询改为对中间表的查询,以此来提高表的查询效率。

    3.优化插入记录的速度

    影响插入速度主要是索引、唯一性校验、一次插入的条数。以InnoDB表为例。

    (1)禁止唯一性检查

    插入数据时,mysql会对插入的记录。唯一性校验会降低插入记录的速度。等记录插入完毕后再开启。

    SET UNIQUE_CHECKS = 0;开启
    SET UNIQUE_CHECKS = 1;关闭

    (2)禁止外键检查

    插入数据之前禁止对外键的检查,数据插入后再恢复对外键的检查。

    SET foreign_key_checks = 0;
    SET foreign_key_checks = 1;

    (3)禁止自动提交

    插入数据之前禁止事务的自动提交,数据导入后再恢复。

    SET autocommit = 0;
    SET autocommit = 1;

    数据库优化

    1.优化表的结构,对常用字段和非常用的字段分开存储。

    2.优化sql合理使用索引。

    3.做数据库读写分离,减少io压力。因为数据库对记录做持久化并存储在磁盘上,对磁盘的io是非常消耗性能的操作,因此,读写在一个库中会大大增加io的压力。

    4.尝试使用缓存,不要让数据都走数据库。

    5.对业务做垂直拆分。

    6.对表做水平拆分。

    合理使用所以对性能提升至关重要。

    如果索引建立在重复数据很少的字段上效果明显,对于重复数据量大的字段就不见得会提升效率。

    对索引列使用函数会导致索引失效。技巧:对索引列不使用函数而对常数项使用函数,索引就有效了。

  • 相关阅读:
    debug和release转载
    坐标系与基本图元(8)
    坐标系与基本图元(7)
    坐标系与基本图元(5)
    坐标系与基本图元(6)
    坐标系与基本图元(4)
    坐标系与基本图元(3)
    坐标系与基本图元(2)
    BZOJ 1090
    Xor
  • 原文地址:https://www.cnblogs.com/tp123/p/6429984.html
Copyright © 2011-2022 走看看