美文网首页
mysql使用规定

mysql使用规定

作者: Gundy_ | 来源:发表于2018-12-19 22:28 被阅读27次

    使用约定

    • 不使用存储过程

    • 不使用自定义的函数, 尽量不使用MySQL的函数

    • 不使用触发器

    • 不使用全文索引

    • 不使用分区表

    • 不使用多表查询, 禁用JOIN

    • 不使用 * , SELECT使用具体的列名

      • 开发时不会因为使用*而显著缩短开发时间和设计时间
      • 还能减少QUERY RT
      • 在发生列的增/删时, 发生列名修改时, 最大限度避免程序逻辑中没有修改导致的BUG
      • 后续很多工具需要依赖于此
    • 所有的SQL, 必须强制带上 LIMIT $RowCount

      • RowCount尽量地小. RowCount <= 10,000 (暂时)
      • RowCount对于一个归一化的SQL是可以枚举的少量具体值
    • 出现大批量操作的导数据/变更数据必须分批进行. 比如示例:

      • SELETE table WHERE Updated > 20001001 LIMIT 2000
      • UPDATE table ... WHERE Id = ? LIMIT 1
      • DELETE FROM table WHERE Id = ? LIMIT 1
      • UPDATE table ... WHERE Id > ? LIMIT 30
      • DELETE FROM table WHERE Id > ? LIMIT 1000
    • 查找记录是否存在, 可以使用SELECT 1

    • 判断Server是否健康, 可以使用: SELECT UNIX_TIMESTAMP();

    • 大SQL拆成多个小SQL, 增加缓存命中率和提高CPU利用率(降低IOWait)

    • 禁止在MySQL Server端做运算, md5() rand()等, 在索引列中作运算, 不会使用索引

    • 禁止IN的元素个数超过100. 建议个数: 30 or 50

    • 禁止使用%前缀模糊查询

    • 禁止使用子查询

    • 分页如果有大OFFSET, 可以先取Id, 然后用IN取结果集, 会提高效率

    • 区别 COUNT(1) COUNT(*) COUNT(Id)

      • 限制: 在SSD / PCIeFlush下, 行数 >= 1,000,000 , 禁止在高流量下使用 COUNT函数
      • 限制: 在SAS 下, 行数 >= 500,000 , 禁止在高流量下使用 COUNT函数
        数据订正

    执行DELETE/UPDATE, 一定要加上LIMIT 1, 确定只操作一行. 相关的SQL,一定找人(水平相当或更好的)做好DoubleCheck

    相关文章

      网友评论

          本文标题:mysql使用规定

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