MySQL使用记录

Posted 捞鱼之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL使用记录相关的知识,希望对你有一定的参考价值。

数据库设计规范

基础规范

  1. 表必须有主键,建议使用整型作为主键
  2. 禁止使用外键,表之间的关联性和完整性通过应用层控制
  3. 表设计之初,应考虑大致的数量级,若表的记录数低于1000w,尽量使用单表,不建议分表
  4. 建议将大字段,访问频率低及不需要筛选的字段拆分到拓展表中(做好垂直拆分)
  5. 控制单实例中表的总数,单个表分表个数控制在1024以内

表设计规范

emememem~

列设计规范

  1. 合理使用字段类型
  2. 所有字段应定义为NOT NULL并设置默认值

索引规范

  1. 不建议在频率更新的字段建立索引
  2. 单表索引数建议5个以内,过多,insert性能下降,导致mysql使用错误的索引。可以在语句中加force index 来强制使用某一个索引
  3. 组合索引不建议超过5个,理解组合索引最左原则,避免重复建索引。譬如 若建立了(a,b,c),相当于建立了(a),(a,b),(a,b,c)
  4. 非必要不要进行join查询,如果进行join查询,被join的字段必须类型相同,最好建立好索引

SQL规范

  1. 禁止 select *
  2. insert 必须指定字段
  3. 隐式转换会使索引失效,导致全表扫描
  4. 禁止where条件使用函数或者表达式,导致不能命中索引,全表扫描。如有必要可建立函数索引
  5. 禁止负向查询(!=,<>,not in)以及%开头的模糊查询
  6. 避免直接返回大结果集造成内存溢出,可采用分段或游标方式
  7. 同一字段上多个or可改写为in,in的值必须小于1024个字符,因为or不走索引,in走索引

常见问题集

问题一

mysql5.7版本以上默认开启only_full_group_by 执行group by语句会出现 this is incompatible with sql_mode=only_full_group_by的错误信息

查看官网https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

解决方案

全局修改:
SET GLOBAL sql_mode = sys.list_drop(@@global.sql_mode, 'ONLY_FULL_GROUP_BY');
临时修改:
SET SESSION sql_mode = sys.list_drop(@@session.sql_mode, 'ONLY_FULL_GROUP_BY');
查看sql_mode的值:
SELECT @@session.sql_mode;
SELECT @@sql_mode;
SELECT @@global.sql_mode;

以上解决方案仅只能在mysql服务不断电的情况生效,如需解决请自行到mysql的安装目录下的配置文件修改sql_mode



以上是关于MySQL使用记录的主要内容,如果未能解决你的问题,请参考以下文章

具有运行时 pojos 的带有 Hibernate 的 OSGi 片段包

Sphinx - 在代码块片段中使用省略号 (...)

记录C#常用的代码片段

discuz X3.1 源代码阅读,记录代码片段

使用 json rereiver php mysql 在片段中填充列表视图

部分代码片段