zoukankan      html  css  js  c++  java
  • 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会强制类型转换,但不会走索引
     
  • 相关阅读:
    添加可运行的js代码
    一,IL访问静态属性和字段
    UI基础UIWindow、UIView
    ASP.NET MVC:会导致锁定的会话
    2013腾讯编程马拉松初赛
    使用phantomjs生成网站快照
    C语言
    设置 Ext.data.Store 传参的请求方式
    HDU 2041 超级楼梯
    MySQL 监控-innotop
  • 原文地址:https://www.cnblogs.com/wangzepu/p/11389686.html
Copyright © 2011-2022 走看看