建表规约表白是与否概念的字段,必须应用is_xxx命名,数据类型是unsigned tinyint(1-是,0-否)
任何字段如果是非正数,必须是unsignedPOJO类中的任何布尔型变量,都不要加is前缀须要在< resultMap >设置从is_xxx到Xxx的映射关系数据库示意是与否的值,应用tinyint类型保持is_ xxx的命名形式是为了明确取值含意和取值范畴表名,字段名必须应用小写字母(或数字),禁止呈现数字结尾,禁止两个下划线两头只呈现数字.数据库字段名的批改代价很大,因为无奈进行预公布,所以字段名称须要慎重考虑
MySQL在windows下不辨别大小写,但在Linux下默认是辨别大小写的因而,数据库名,表名,字段名,都不容许呈现任何大写字母表名不应用复数名词
表名应该仅仅示意表外面的实体内容,不应该示意实体数量对于DAO类名也是复数模式,合乎表白习惯禁止应用MySQL的官网保留字命名:
descrangematchdelayed索引命名:
pk_字段名: 主键primary key索引uk_字段名: 惟一unique key索引名idx_字段名: 一般index索引名小数类型为decimal, 禁止应用float,double
float和double在存储的时候,存在精度损失的问题,很可能在值比拟时,失去不正确的后果如果存储的数据范畴超过decimal的范畴,倡议将数据拆分成整数和小数离开存储如果存储的字符串长度简直相等,应用char定长字符串类型varchar是可变长字符串,不事后调配存储空间,长度不要超过5000
如果长度大于此值,定义字符串类型为text, 独立进去一张表,用主键来对应,防止影响其它字段索引效率表必备的三个字段:
id: 主键,类型为bigint,unsigned,单表时自增,步长为1gmt_create: 类型为datetime,当初时示意被动创立gmt_modified 类型为datetime,过去分词示意被动更新表的命名最好加上[业务名称_表的作用]库名与利用名称尽量统一如果批改字段含意或者对字段的示意状态追加时,须要及时更新字段正文字段容许适当冗余以进步查问性能,但必须思考数据统一.冗余的字段应遵循:
不是频繁批改的字段不是varchar超长字段,更不能是text字段
商品类目名称应用频率高,字段长度短,名称根本变化无穷,可在相关联的表中冗余存储类目名称,防止关联查问单表行数超过500万行或者单表容量超过2GB, 才举荐进行分库分表
如果预计三年后的数据量基本达不到这个级别,不要在创立表时就分库分表适合的字符存储长度,岂但节约数据库表空间,节约索引存储,更重要的是晋升检索速度
索引规约业务上具备惟一个性的字段,即便是多个字段的组合,也必须建成惟一索引
索引不会影响insert的速度,这个速度能够疏忽,但进步查找速度是显著的即便在应用层做了十分欠缺的校验管制,只有没有惟一索引,必然有脏数据产生超过三个表禁止join, 须要join的字段 ,数据类型必须相对统一. 多表关联查问时,保障被关联的字段须要有索引在varchar字段上建设索引时,必须指定索引长度,没必要对全字段建设索引,依据理论文本区分度决定索引长度即可
索引长度与区分度是一对矛盾体
个别对字符串类型数据,长度为20的索引,区分度会高达90%以上能够应用count(distinct left(列名, 索引长度)) / count(*) 的区分度来确定页面搜寻严禁左含糊或者全含糊,如果须要要应用搜索引擎来解决
索引文件具备B-Tree的最左前缀匹配个性,如果右边的值未确定,无奈应用此索引如果有order by的场景,要留神利用索引的有序性 .order by最初的字段是组合索引的一部分,并且放在索引组合程序的最初,避免出现file_sort的状况,影响查问性能
where a=? and b=? order by c;索引: a_b_c要是在索引中有范畴查找,那么索引有序性就无奈利用(WHERE a>10 ORDER BY b; 索引:a_b无奈排序)
利用笼罩索引来进行查问操作,防止回表
比方一本书须要晓得第11章是什么题目,只须要目录浏览一下就更好,这个目录就起到笼罩索引的作用可能建设索引的品种分为主键索引,惟一索引,一般索引三种,而笼罩索引只是一种查问的成果用explain的后果,extra列会呈现: using index利用提早关联或者子查问优化超多分页场景:
MySQL不是跳过offset行,而是取offset+N行,而后返回放弃前offset行,返回N行当offset特地大的时候,效率就十分低下,要么管制返回的总页数,要么对超过特定阈值的页数进行SQL改写
先疾速定位须要获取的id字段,而后再关联:SELECT a.* FROM table1 a,(select id from table1 where condition LIMIT 100000,20) b where a.id=b.idSQL性能优化的指标: 至多要达到range级别,要求是ref级别,最好是consts级别
...