Hand-SQL

编写高效的SQL

  • 避免使用GROUP BY、DISTINCT、OR、IN等语句使用,避免使用联表查询和子查询,因为将使执行效率大大下降
  • 当使用了联合索引,注意提取字段的前后顺序,取第二个索引和第三个索引会导致联合索引失效
  • 使用like ‘%abc%’会导致索引失效
  • 如果在SQL里使用了MySQL部分自带函数,索引将失效。如果使用了OR或IN,索引也会失效
  • 尽量不要在where条件中使用函数,否则将不能使用索引
  • 使用UNION ALL操作代替OR操作
  • 尽量使用NOT NULL 来填充数据库

mysql的常用技巧

  • 使用Explain/DESC 来分析SQL的执行情况
  • 使用 show processlist来查看当前mysql服务器线程执行情况,是否锁表
  • 几个常用的查询 show VARIABLES  SHOW status   SHOW ENGINES

数据库开发规范

  • 任何字段如果是非负数,建议是unsigned
  • tinyint指定长度必须为1,且不允许存负数
  • 表达逻辑删除字段名:delete_flag,1表删除
  • 数据库名、表名、字段名都不允许出现任何大写字母(Windows不区分大小写,但在Linux下默认是区分大小写的)
  • 小数类型为decimal,禁止使用float和double
  • 如果存储的字符串长度几乎相等,使用char定长字符串类型
  • varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,将该字段存储的数据独立出一张新的表,用主键来对应,避免影响其他字段的索引效率
  • 表必备字段:id,creation_date,created_by, last_updated_by, last_update_date, object_version_number
  • 单表行数超过500万行或者单表容量超过2GB,才进行分库分表

猜你喜欢

转载自blog.csdn.net/awodwde/article/details/118571910