• mysql实践:sql优化


    ---恢复内容开始---

    设计表的时候

    1. 不同的表涉及同一个公共意义字段不要使用不同的数据类型(可能导致索引不可用,查询结果有偏差)
    2. 不要一张表放太多的数据     主表20~30个字段     其他表最好不超过20个
    3. 最好不要有为Null的列,原因:https://mp.weixin.qq.com/s/U4RRNVj5BKwkQ-CWmPd9Fg
    4. 如果存储的字符串长度几乎相等,使用char定长字符串类型
    5. varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表, 用主键来对应,避 免影响其他字段索引效率;
    6. 小数类型为 decimal,禁止使用 float 和 double;float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不 正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
    7. 禁用保留字,如desc、range、match、delayed 等,请参考 MySQL 官方保留字

    查询表的时候

    1. 最好不要使用联表查询(风险不可控)【理论上禁止】
    2. 不要在字段当中进行函数运算【禁止】
    3. 尽量不要使用now()函数进行查询【禁止】
    4. 查询时只查询用到的字段,不要使用 “*”查询       说明:1)增加查询分析器解析成本。2)增减字段容易与 resultMap 配置不一致。
    5. 删除全表数据的时候用truncate而不是delete
    6. 尽量不要使用模糊匹配 '%abc%'【理论上禁止】
    7. sql语句不要写的过于复杂,逻辑判断尽量在内存中完成
    8. 不要加入触发器
    9. 使用explain查看执行计划
     
    加索引的时候
    1. 添加索引的字段一定要有很好的区分度【cardinality】
    2. 更新数据的时候最好使用主键作为更新条件
    3. 加入联合索引要把区分度高的字段放在前面
    4. 不常访问的列不要加索引
    5. 长字符串不要加索引,如果一定要加,选取字符串的前n位加上。(n根据实际情况设定,经验值不会超过20)
    6. 唯一索引名为 uk_字段名;普通索引名则为 idx_字段名;
     

    ---恢复内容结束---

    设计表的时候

    1. 不同的表涉及同一个公共意义字段不要使用不同的数据类型(可能导致索引不可用,查询结果有偏差)
    2. 不要一张表放太多的数据     主表20~30个字段     其他表最好不超过20个
    3. 最好不要有为Null的列,原因:https://mp.weixin.qq.com/s/U4RRNVj5BKwkQ-CWmPd9Fg
    4. 如果存储的字符串长度几乎相等,使用char定长字符串类型
    5. varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表, 用主键来对应,避 免影响其他字段索引效率;
    6. 小数类型为 decimal,禁止使用 float 和 double;float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不 正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
    7. 禁用保留字,如desc、range、match、delayed 等,请参考 MySQL 官方保留字

    查询表的时候

    1. 最好不要使用联表查询(风险不可控)【理论上禁止】
    2. 不要在字段当中进行函数运算【禁止】
    3. 尽量不要使用now()函数进行查询【禁止】
    4. 查询时只查询用到的字段,不要使用 “*”查询       说明:1)增加查询分析器解析成本。2)增减字段容易与 resultMap 配置不一致。
    5. 删除全表数据的时候用truncate而不是delete
    6. 尽量不要使用模糊匹配 '%abc%'【理论上禁止】
    7. sql语句不要写的过于复杂,逻辑判断尽量在内存中完成
    8. 不要加入触发器
    9. 使用explain查看执行计划
     
    加索引的时候
    1. 添加索引的字段一定要有很好的区分度【cardinality】
    2. 更新数据的时候最好使用主键作为更新条件
    3. 加入联合索引要把区分度高的字段放在前面
    4. 不常访问的列不要加索引
    5. 长字符串不要加索引,如果一定要加,选取字符串的前n位加上。(n根据实际情况设定,经验值不会超过20)
    6. 唯一索引名为 uk_字段名;普通索引名则为 idx_字段名;
    7.少用数据库函数,比如sysdate(),可以改为传入一个当前时间
    8.根据具体业务,创建联合索引
    9.索引庞大会导致索引文件太大,可以加一张中间表来解决
         例如:报价中状态单据,定时任务扫描更新处理
    10.xml文件里面没有添加jdbc-type,传入map类型,字段类型不符合的话,mysql会强制类型转换,但不会走索引
     
  • 相关阅读:
    Android Studio 常用快捷键以及设置
    GitHub windows客户端拉代码和提交代码
    Android Studio + gradle多渠道打包
    Android sdk 镜像服务器资源
    Rikka with Graph(联通图取边,暴力)
    Rikka with Chess(规律)
    Largest Submatrix(动态规划)
    City Game(动态规划)
    Largest Rectangle in a Histogram(最大矩形面积,动态规划思想)
    How many ways(记忆化搜索)
  • 原文地址:https://www.cnblogs.com/wangzepu/p/11389686.html
Copyright © 2020-2023  润新知