MySQL 元数据设计规范
旌德娱乐新闻网 2025-08-10
Java 遗留字符串ip 转 int 型式
public static long ipToLong(String addr){ String[] addrArray = addr.split("\."); long num = 0; for (int i = 0; i < addrArray.length; i++) { int power = 3 - i; num += ((Integer.parseInt(addrArray[i]) % 256 * Math.pow(256, power))); } return num;}public static String longToIp(long i){ return ((i>> 24) & 0xFF) + "." + ((i>> 16) & 0xFF) + "." + ((i>> 8) & 0xFF) + "." + (i & 0xFF);}4.【决定】不录用用到 enum,set。 因为它们耗费密闭,且枚举值写死了,更动不方便。录用用到 tinyint 或 smallint。
5.【决定】不录用用到 blob,text 等型式。它们都来得耗费硬盘和FAT。在加载注记数据集时,不会念取大报文到CPU底下从而耗费FAT,受到影响系统稳定性。决定和 PM、RD 沟通,是否真的必需这么大报文。InnoDB 中所当一引历史纪录有约 8098 码字时,不会将该历史纪录中所挑选均有的一个报文将其 768 码字摆在原始 page 底下,该报文只剩段落摆在 overflow-page 底下。不幸的是在 compact 引文件格式下,原始 page 和 overflow-page 则不会加载。
6.【决定】读取金钱的报文,决定用 int 以统称单位读取,最主要数值约 4290 万,计算机系统尾端乘以 100 和相加 100 完成存储。因为 int 空置 4 码字,而 double 空置 8 码字,密闭耗费。
7.【决定】文字数据集适当用 varchar 读取。因为 varchar 是更长读取,比 char 更省密闭。MySQL server 层规定一引所有文字最少存 65535 码字,因此在 utf8 UTF-下最少存 21844 码字,有约不会自动叠加为 mediumtext 报文。而 text 在 utf8 UTF-下最少存 21844 码字,mediumtext 最少存 2^24/3 码字,longtext 最少存 2^32 码字。一般决定用 varchar 型式,字符数绝不不会有约 2700。
8.【决定】时长型式适当挑选 timestamp。因为 datetime 空置 8 码字,timestamp 均空置 4 码字,但是范围为 1970-01-01 00:00:01 到 2038-01-01 00:00:00。更为进阶的新方法,选用 int 来读取时长,用到 SQL 算子 unix_timestamp() 和 from_unixtime() 来完成叠加。
引文所设为计【自愿】InnoDB 注记需要当前盘为 id int/bigint auto_increment,且当前盘值禁令被预览。【决定】当前盘的中所文名指以 pk_ 开头,唯一键盘以 uk_ 开头,都可引文以 ix_ 开头,一律用到小写文件格式,以注记名/报文的中所文名指或首字母作为后缀。【自愿】InnoDB 和 MyISAM 读取柴油发动机注记,引文型式需要为 BTREE;MEMORY 注记可以根据必需选择 HASH 或者 BTREE 型式引文。【自愿】单个引文中所每个引文历史纪录的长度很难有约 64KB。【决定】单个注记上的引文乘积很难有约 7 个。【决定】在创设为引文时,多重新考虑创设为联合引文,并把区分度更高达的报文摆在最前面。如罗列 user_id 的区分度可由 select count(distinct user_id) 计算出来。【决定】在多注记 join 的 SQL 底下,意味着被特别所设为计注记的相互连接罗桌面上有引文,这样 join 执引经济性更高达。【决定】建注记或加引文时,意味着注记底下互相不不存在匹配引文。对于 MySQL 来说,如果注记底下已经不存在 key(a, b),则 key(a) 为匹配引文,必需删除。【决定】如果选择性有约 20%,那么全注记成像比用到引文稳定性更优,即很难设为置引文的适当。分瓦分注记、南区注记【自愿】南区注记的南区报文(partition-key)需要有引文,或者是Pop引文的首罗列。【自愿】单个南区注记中所的南区(包括子南区)乘积很难有约 1024。【自愿】上线前 RD 或者 DBA 需要而无须南区注记的创建人、修补策略。【自愿】出访南区注记的 SQL 需要构成南区键盘。【决定】单个南区邮件不有约 2G,总大小不有约 50G。决定总南区数不有约 20 个。【自愿】对于南区注记执引 alter table 叠加,需要在经营范围低峰期执引。【自愿】运用于分瓦策略的,瓦的使用量很难有约 1024。【自愿】运用于分注记策略的,注记的使用量很难有约 4096。【决定】单个分注记不有约 500W 引,ibd 个人信息量不有约 2G,这样才能让数据集分布式变得稳定性更佳。【决定】水平分注记适当用取模形式,日志、报注记类数据集决定运用于日期完成分注记。UTF-【自愿】索引本身瓦、注记、罗列所有UTF-需要保持完全一致,为 utf8 或 utf8mb4。【自愿】后部计算机系统UTF-或者状况codice_中所的UTF-,与索引、注记的UTF-需要完全一致,统一为 utf8。计算机系统层 DAO 所设为计决定【决定】新的字符串绝不不会用 model,录用用到手动拼 SQL + 绑定codice_传入参数的形式。因为 model 虽然可以用到面向对象的形式叠加 db,但是其用到不当很较难显现出转化成的 SQL 非常复杂,且 model 层自己做的自愿型式叠加稳定性较低,最终引致索引稳定性下降。【决定】后部计算机系统相互连接 MySQL 或者 Redis,需要要有相互连接了事和败北重连机制,且败北重试需要有时有隔时长。【决定】后部计算机系统报错底下适当能够提示 MySQL 或 Redis 原生态的报错个人信息,便于排查错误。【决定】对于有相互连接池的后部计算机系统,需要根据经营范围必需配置初始、小于、最主要相互连接数,了事时长以及相互连接回收机制,否则不会枯竭索引相互连接水资源,显现出线上事故。【决定】对于 log 或 history 型式的注记,随时长持续增长较难越来越大,因此上线前 RD 或者 DBA 需要创设为注记数据集修补或归档建议书。【决定】在不应用领域计算机系统所设为计阶段,RD 需要重新考虑并规避索引中所于其推迟对于经营范围的受到影响。适当不适当从瓦短时推迟(20 秒范围内)对经营范围显现出受到影响,决定自愿完全差异性的念开启日常事务走到主瓦,或预览后过一段时长再去念从瓦。【决定】多个所发经营范围逻辑出访同一块数据集(InnoDB 注记)时,不会在索引尾端显现出引闩甚至注记闩引致所发下降,因此决定预览类 SQL 适当基于当前盘去预览。【决定】经营范围逻辑之时有加闩顺序适当保持完全一致,否则不会引致死闩。【决定】对于单注记念写比大于 10:1 的数据集引或单个罗列,可以将热点数据集摆在线程底下(如 Memcached 或 Redis),加快出访速度,减小 MySQL 压力。一个规范的建注记语义示例一个极其规范的建注记语义为:create table user( MLT-idMLT- bigint(11) not null auto_increment, MLT-user_idMLT- bigint(11) not null comment '用户 ID', MLT-usernameMLT- varchar(45) not null comment '登录名', MLT-emailMLT- varchar(30) not null comment '的网站', MLT-nicknameMLT- varchar(45) not null comment '昵指', MLT-avatarMLT- int(11) not null comment '头像', MLT-birthdayMLT- date not null comment '生日', MLT-genderMLT- tinyint(4) default '0' comment '性取向', MLT-introMLT- varchar(150) default null comment '简介', MLT-resume_urlMLT- varchar(300) not null comment '简介存摆在地址', MLT-register_ipMLT- int not null comment '用户注册时的源 IP', MLT-review_statusMLT- tinyint not null comment '查核情况下,1-通过,2-查核中所,3-未通过,4-已经提交查核', MLT-create_timeMLT- timestamp not null comment '历史纪录创建人的时长', MLT-update_timeMLT- timestamp not null comment '参考资料简化的时长', primary key (MLT-idMLT-), unique key MLT-idx_user_idMLT- (MLT-user_idMLT-), key MLT-idx_usernameMLT-(MLT-usernameMLT-), key MLT-idx_create_timeMLT-(MLT-create_timeMLT-, MLT-review_statusMLT-))engine = InnoDBdefault charset = utf8comment = '用户基本个人信息';DML 语义自愿】select 语义需要而无须具体报文中所文名指,禁令写成 *。因为 select * 不会将不该念的数据集也从 MySQL 底下念出来,显现出网卡压力。【自愿】insert 语义而无须具体报文中所文名指,绝不不会写成 insert into t1 values(…),道义同上。【决定】insert into … values(xx),(xx),(xx)…,这底下 xx 的值绝不不会有约 5000 个。值太少虽然上线很快,但不会引起于其不时有断推迟。【决定】select 语义绝不不会用到 union,录用用到 union all,并且 union 主语乘积受限在 5 个范围内。因为 union all 不必需去重,节省索引水资源,提更高稳定性。【决定】in 值罗列注记受限在 500 范围内。例如 select … where user_id in(…500 个范围内…),这么做是为了提更高底层成像,减轻索引压力从而加速索引。【决定】日常事务底下低成本预览数据集必需管控使用量,完成适当的 sleep,做到少量多次。【自愿】日常事务涉及的注记需要全部是 InnoDB 注记。否则一旦败北不不会全部回滚,且易显现出于其瓦不时有断终尾端。【自愿】录入和日常事务发往主瓦,只念 SQL 发往从瓦。【自愿】除静态注记或小注记(100 引范围内),dml 语义需要有 where 必需,且用到引文加载。【自愿】生产厂状况禁令用到 hint,如 sql_no_cache,force index,ignore key,straight join 等。因为 hint 是用来自愿 sql 按照某个执引计划来执引,但随着数据集量变化我们很难意味着自己当初的预判是正确的,因此我们要相信 MySQL 最佳化筒。【自愿】where 必需底下等号左右报文型式需要完全一致,否则很难能用引文。【决定】select|update|delete|replace 要有 where 主语,且 where 主语的必需必需用到引文加载。【自愿】生产厂索引中所排斥不录用大注记上起因全注记成像,但对于 100 引下述的静态注记可以全注记成像。索引数据集量绝不不会有约注记引数的 25%,否则不不会能用引文。【自愿】where 主语中所禁令只用到全模糊的 like 必需完成加载,需要有其它等值或范围索引必需,否则很难能用引文。【决定】引文罗列绝不不会用到算子或注记达式,否则很难能用引文。如 where length(name) = 'admin' 或 where user_id + 2 = 10023。【决定】提更高用到 or 语义,可将 or 语义最佳化为 union,然后在各个 where 必需上创设为引文。如 where a = 1 or b = 2 最佳化为 where a = 1 … union … where b = 2, key(a), key(b)。【决定】分页索引,当 limit 交会点较更高时,可先用软性必需完成软性。如 select a, b, c from t1 limit 10000, 20; 最佳化为: select a, b, c from t1 where id> 10000 limit 20;。多注记相互连接【自愿】禁令跨 DB 的 join 语义。因为这样可以提更高组件时有耦合,为索引拆分奠定坚实基础。【自愿】禁令在经营范围的预览类 SQL 语义中所用到 join,比如 update t1 join t2 …。【决定】不决定用到子索引,决定将子索引 SQL 拆开结合计算机系统多次索引,或用到 join 来代替子索引。【决定】线上状况,多注记 join 绝不不会有约 3 个注记。【决定】多注记相互连接索引录用用到中所文名,且 select 罗列注记中所要用中所文名引用报文,索引.注记文件格式,如 select a from db1.table1 alias1 where …。【决定】在多注记 join 中所,适当挑选结果集来得大的注记作为特别所设为计注记,来 join 其它注记。日常事务【决定】日常事务中所 insert|update|delete|replace 语义叠加的引数管控在 2000 范围内,以及 where 主语中所 in 罗列注记的传参乘积管控在 500 范围内。【决定】低成本叠加数据集时,必需管控日常事务妥善处理时有隔时长,完成适当的 sleep,一般决定值 5-10 秒。【决定】对于有 auto_increment 属性报文的注记的弹出叠加,所发必需管控在 200 范围内。【自愿】计算机系统所设为计需要重新考虑“索引日常事务隔离等级”显现出的受到影响,包括脏念、不可重复念和幻念。线上决定日常事务隔离等级为 repeatable-read。【决定】日常事务底下构成 SQL 不有约 5 个(缴交经营范围除外)。因为过长的日常事务不会引致闩数据集较久,MySQL 核心线程、相互连接消耗太少等地球磁场解决办法。【决定】日常事务底下预览语义适当基于当前盘或 unique key,如 update … where id = XX;,否则不会显现出过道闩,核心扩大闩定范围,引致系统稳定性下降,显现出死闩。【决定】适当把一些典型外部调用移出日常事务,如调用 Web Service,出访邮件读取等,从而不适当日常事务过长。【决定】对于 MySQL 于其推迟严格敏感的 select 语义,请开启日常事务自愿出访主瓦。挑选和分组【决定】提更高用到 order by,和经营范围沟通能不挑选就不挑选,或将挑选放到计算机系统尾端去做。order by、group by、distinct 这些语义极其动用 CPU,索引的 CPU 水资源是极其宝贵的。【决定】order by、group by、distinct 这些 SQL 适当能用引文直接索引出挑选好的数据集。如 where a = 1 order by 可以能用 key(a, b)。【决定】构成了 order by、group by、distinct 这些索引的语义,where 必需软性出来的结果集请保持在 1000 引范围内,否则 SQL 不会来得慢。线上禁令用到的 SQL 语义【更高危】停用 update|delete t1 … where a = XX limit XX; 这种带 limit 的预览语义。因为不会引致于其不完全一致,引致数据集错乱。决定加上 order by PK。【更高危】禁令用到相似性子索引,如 update t1 set … where name in(select name from user where …);,经济性极其低下。【自愿】停用 procedure、function、trigger、views、event、外键盘规范。因为他们消耗索引水资源,减小索引实例完全差异性。录用都在计算机系统尾端借助于。【自愿】停用 insert into … on duplicate key update … 在更高所发状况下,不会显现出于其不完全一致。【自愿】禁令联注记预览语义,如 update t1, t2 where t1.id = t2.id …。。四川癫痫医院哪家比较专业西安牛皮癣医院哪家更好
上海白癜风
成都看白癜风哪里好
广东妇科检查哪家医院好
流鼻血怎么办
精索静脉曲张
端午节后感染新冠的人更多了?别急,专家给出应对方法!
夏天咳嗽吃什么能快速止咳化痰
妇科炎症

-
广州这公园是市民义务劳动建造,为解决城市水患,曾获评羊城八景
音乐 2025-10-24劳动的每一位义务北京市民呢?追捧大家留言分享哦!本文是发行商作品,未经富家女三薰书面授权,严禁搬运、登载、洗稿。如需登载,叮嘱与著者富家女三薰直接联系,谢谢。。a href="htt

-
2021年营收微涨净利下滑 万科称有决心2022企稳回升
视频 2025-10-243月30日晚,万达发布2021年报,意味着营业收入4528亿元,不属于上市Corporation控股公司的净利润225.2亿元;意味着销售金额6277.8亿元。2021年,在金融业前所未有的震荡

-
暖心!张馨予的网站询问如何领养退役搜救犬康康
资讯 2025-10-24张馨予曾举行《奇兵神犬》 新浪娱乐公司讯 3月初30日,张馨予转发了《去野吧毛孩子》主持人组的微博,暗示自己看到其中搜救犬郑中基的讲述,深受感动,这让她不禁想起都曾参与

-
千万别吃发物,会促进癌细胞扩散?医生告诉你怎么吃,务必便是
视频 2025-10-24患者过份忌口,回事这大可并不所需!肺癌病患者只有进食得多样既有、新一轮既有,才能让自己微量元素充足,有充足的身躯去对抗细胞,大家一定要解释这一点!#有益2022##谣零零计划案#

-
本公司A:2021年归属股东净利润225.2亿元
资讯 2025-10-24里国网长江实业讯 3月30日,本公司A发布2021年年度报告。报告据悉,合资公司实现营收4528.0亿元,营业收入增长8.0%;归属于上市公司股东的销售收入225.2亿元。