快捷搜索:

标签

0

SQL Server的行转列和列转行

行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 的运算符PIVOT来实现。用传统的方法,比较好理解。层次清晰,而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法比一系列复杂的SELECT…CASE 语句中所指定的语法更简单、更具可读性。下面我们通过几个简单的例子来介绍一下列转行、行转列问题。我们首先先通过一个老生常谈的例子,学生成绩表(下面简化了些)来形象了解下行转列CREATE TABLE [StudentScores]( [UserName] NVARCHAR(20), ...

阅读全文>>

0

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

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

阅读全文>>

0

SQL Server 常用近百条SQL语句(收藏版)

1. sqlserver查看实例级别的信息,使用SERVERPROPERTY函数select SERVERPROPERTY ('propertyname')2. 查看实例级别的某个参数XX的配置select * from sys.configurations where name='XX'3. 更改实例级别的某个参数XX的值sp_configure 'XX','0' RECONFIGURE WITH OVERRIDEsp_configure显示或更改当前服务器的全局配置设置。 RECONFIGURE表示SQL Server不用重新启动就立即生效 。使用sp_configure更改设置时,请使用...

阅读全文>>

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...

阅读全文>>