mysql使用规定

使用约定

  • 不使用存储过程

  • 不使用自定义的函数, 尽量不使用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使用规定)