0

分享一份大佬的MySQL数据库设计规范,值得收藏

概述MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。1、数据库设计以下所有规范会按照【高危】、【强制】、【建议】三个级别进行标注,遵守优先级从高到低。对于不满足【高危】和【强制】两个级别的设计,DBA会强制打回要求修改。1、库名【强制】库的名称必须控制在32个字符以内,相关模块的表名与表名之间尽量提现join的关系,如user表和user_login表。【强制】库的名称格式:业务系统名称_子系统名,同一模块使用的表名尽量使用统一前缀。【强制】一般分库名称命名格式是库通配名_编号,编号从0...

阅读全文>>

0

MySQL 亿级数据量实时同步,如何完美 Hold 住

背景MySQL 由于自身简单、高效、可靠的特点,成为小米内部使用最广泛的数据库,但是当数据量达到千万 / 亿级别的时候,MySQL 的相关操作会变的非常迟缓;如果这时还有实时 BI 展示的需求,对于 MySQL 来说是一种灾难。为了解决 SQL 查询慢,查不了的业务痛点,我们探索出一套完整的实时同步,即席查询的解决方案,本文主要从实时同步的角度介绍相关工作。早期业务借助 Sqoop 将 Mysql 中的数据同步到 Hive 来进行数据分析,使用过程中也带来了一些问题:虽然 Sqoop 支持增量同步但还属于粗粒度的离线同步,无法满足实时性的需求;每次同步 Sqoop 以 SQL 的方式向 MyS...

阅读全文>>

0

高并发环境下,先操作数据库还是先操作缓存?

前言在分布式系统中,缓存和数据库同时存在时,如果有写操作的时候,先操作数据库还是先操作缓存呢?先思考一下,可能会存在哪些问题,再往下看。下面我分几种方案阐述。 缓存维护方案一假设有一写(线程A)一读(线程B)操作,先操作缓存,在操作数据库,如下流程图所示:1)线程A发起一个写操作,第一步del cache2)线程A第二步写入新数据到DB3)线程B发起一个读操作,cache miss,4)线程B从DB获取最新数据5)请求B同时set cache这样看,没啥问题。我们再看第二个流程图,如下:1)线程A发起一个写操作,第一步del cache2)此时线程B发起一个读操作,cache miss3)线程...

阅读全文>>

0

Mysql数据库表引擎与字符集

Mysql数据库表引擎与字符集1.服务器处理客户端请求其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。那服务器进程对客户端进程发送的请求做了什么处理,才能产生最后的处理结果呢?客户端可以向服务器发送增删改查各类请求,我们这里以比较复杂的查询请求为例来画个图展示一下大致的过程:虽然查询缓存有时可以提升系统性能,但也不得不因维护这块缓存而造成一些开销,比如每次都要去查询缓存中检索,查询请求处理完需要更新查询缓存,维护该查询缓存对应的内存区域。从MySQL 5.7....

阅读全文>>

0

数据库分库分表最佳实践及说明

数据库瓶颈不管是IO瓶颈还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载的活跃连接数的阈值。在业务service来看, 就是可用数据库连接少甚至无连接可用,接下来就可以想象了(并发量、吞吐量、崩溃)。IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询会产生大量的IO,降低查询速度->分库和垂直分表第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 ->分库CPU瓶颈第一种:SQl问题:如SQL中包含join,group by, order by,非索引字段条件查询等,增加CPU运算的操作->SQL优化,建立合适的索引,在业...

阅读全文>>

0

Mysql索引扫盲总结

什么是索引?索引为什么查询快,索引的数据结构是什么?聚簇索引/非聚簇索引区别?什么是覆盖索引?唯一索引/普通索引?单列索引/联合索引区别?Full-index全文索引?什么是下推索引?什么是最左匹配,查询回表?哪些字段适合建索引?为什么一般主键索引最好是自增长的, 尽量短的数值类型?为什么有些SQL不走索引?索引的最佳实践?索引为什么快索引的本质是空间换时间。+bonus: 加快检索速度,加快多表连接-price: 额外空间开销,维护索引的额外时间开销所以我们通过索引这个缓存来提高数据查询的效率。假如我们自己设计数据库索引的话,我们会选取什么样的数据结构呢?下面我们来分析下各种查询常见的数据结...

阅读全文>>

0

日期时间,在SQL中到底是字符串还是数字?

经常写SQL脚本的朋友,对数据库中的日期时间类型肯定不会陌生,这是一种非常有意思的数据类型,她既像是字符串类型、又像是数字类型。我们可以像字符串那样组合日期、又可以像数字那样进行各种加减运算。日期时间太常用了,我们一定好认真的掌握她。MySQL、PostgreSQL、SQL Server等各种数据库系统都提供了丰富的日期时间类型和大量的日期时间处理函数。其实日期时间类型的本质,就是double浮点数,可以把日期时间类型看作披着字符串外衣的浮点数。所以日期时间类型不但像字符串可组合调用、又像数字可进行运算就不难理解了。下面我们认识下MySQL、pgSQL和SQL Server的日期时间类型。My...

阅读全文>>

0

oracle与mysql数据转换及数据类型对应关系

MySQL与Oracle两种数据库在工作中,都是用的比较多的数据库,由于MySQL与Oracle在数据类型上有部分差异,在我们迁移数据库时,会遇上一定的麻烦,下面介绍MySQL与Oracle数据库数据类型的对应关系。 一、常见数据类型在MySQL与Oracle数据库中的表现形式 说明 mysql oracle 变长字符串 VARC...

阅读全文>>

0

适合中小型公司的Mysql数据库使用规范

这个是公司技术基础建设的一部分,在以后我会逐步推出更多的技术相关文章,感觉有用的请关注。这个文章是为了规范公司的数据库使用的,如果公司有原来使用的规范可以做下对比。这个规范适合中小型公司,数据量不是特别大的。设计的单表容量在千万级。数据库使用 MYSQL ,版本 5.7+数据库使用主要属性类型,数字用 int ,字符用 char ,比较多的字符用 text 或者 verchar, 根据实际情况,能用char的,尽量不要使用 verchar 。需要数据库控制时间的用 timestamp 给默认值即可。不需要数据库控制时间的 使用 char ,用程序控制即可。涉及到金钱的使用 decimal(40...

阅读全文>>

0

这句简单的sql,如何加索引?颠覆了我多年的认知

不啰嗦,直接入正题。问题是这样的。请问下面的sql语句,要想加快查询速度,该怎么创建索引?以下,以mysql数据库为准。select * from test where a=? and b>? order by c limit 0,100结果可能会出乎你的意料。我们首先准备一下运行环境,然后按照最左前缀原则和explain关键字来进行验证。结果真是颠覆了xjjdog多年的认知。准备阶段为了进行验证,我们创建一个简单的数据表。里面有a、b、c三个简单的int字段。CREATE TABLE `test` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT...

阅读全文>>