SQL
惟是致良知
这个作者很懒,什么都没留下…
展开
-
MySQL中InnoDB特性
InnoDB关键特性InnoDB是Mysql最常用的存储引擎。这里简单说下它的一些特性。主要有:插入缓冲、两次写、自适应哈希、异步IO、刷新临近页。插入缓冲即我们所说的Insert Buffer,xxx使用条件同时满足: 索引是辅助索引 索引不是唯一索引 可以在 show status 中查看,seg size * 16KB 代表Insert Buffer大小。两次写即Double Write,主要是为了保证数据页的可靠性。自适应哈希...原创 2020-09-30 22:39:56 · 267 阅读 · 0 评论 -
MySQL体系结构简介
很多人都用过MySQL,可能有些人对MySQL的结构和底层比较模糊。这里简单介绍下。MySQL架构首先看下一个随处可见的架构图,也是大家对MySQL可插拔式存储引擎吹捧的原因从图中可以看出大致分八个组件,这里简单说明下:组件 功能 说明 Connectors 连接客户端 Management Service & Utilities 系统管理控制工具、备份、灾难恢复、分区管理、集群等 Connection Pool 连接..原创 2020-09-30 22:27:46 · 312 阅读 · 0 评论 -
MySQL数据页结构
最近在学习Mysql的数据结构,这里整理下。因为主流存储引擎是InnoDB,学习的也是它。这里介绍的也是InnoDB。数据页在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小4KB。同样的在MySQL中为了提高吞吐率,数据也是分页的,不过MySQL的数据页大小是16KB。(确切的说是InnoDB数据页大小16KB)为了详细说明,这里先用图介绍一下页的结构:而在MySQL内存中,多个这样的数据结构作为节点构成一个双向链表。File Header从上边的图也可以.原创 2020-09-06 20:40:23 · 5808 阅读 · 0 评论 -
MySQL日期类型
MySQL日期类型有5种,分别是DATETIME、 TIMESTAMP、DATE、TIME和YEAR。前三种比较常用。这里对比下 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 DATETIME 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:原创 2020-08-31 22:28:51 · 2555 阅读 · 0 评论 -
Linux下安装Mysql
利用wget下载包wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm下载后目录里有文件安装包rpm -ivh mysql-community-release-el7-5.noarch.rpm安装Mysqlyum install mysql-server之后 /etc/yum....原创 2020-02-19 00:06:39 · 114 阅读 · 0 评论 -
Oracle Hint入门
优化器Oracle数据库中的优化器又叫查询优化器(Query Optimizer)。它是SQL分析和执行的优化工具,它负责生成、制定SQL的执行计划。Oracle的优化器原来有两种,基于规则的优化器(RBO : Rule-Based Optimization)与基于代价的优化器(CBO : Cost-Based Optimization)。ORACLE已经舍弃了RBO,选择CBO。CBO是一种原创 2017-11-30 17:37:37 · 348 阅读 · 0 评论 -
VPD学习笔记
VPD最近一直做MC的项目,根据context不同,利用VPD对查询数据进行过滤。问题:之前我们做权限控制常用的做法是建立视图,然后多在查询语句中加where语句来控制。不过这样当程序改变时,DB改动也比较大。另外,这个只是在应用程序层面上进行过滤。抛开不安全不说,让应用程序自己控制权限,总有点职责不明。VPD 即虚拟专用数据库(Virtual Private Database),简单来说通过在数...原创 2018-03-25 17:57:04 · 1174 阅读 · 1 评论 -
物化视图
年前项目中跟一个Domain的数据查询数据没及时刷新的问题。后来就考虑使用物化视图,然后每天刷新两次来保持同步。这里整理下。视图视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定。比如下边代码就是创建一个视图,然后每次查询都直接基于视图,查询语句也会简单化。CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHER...原创 2018-06-17 18:59:37 · 713 阅读 · 0 评论 -
Hive SQL函数整理
hive sql跟mysql还是有点区别的。这里整理下一些自己常用的函数。一、关系函数匹配某列是否等于某值或列,比如A <> B。关系函数 函数 语法及含义 注意及举例 = 等值比较 不要用于NULL <> 不等 不要用于NULL < 小于 不要用于NULL <= 小于等于 ...原创 2019-08-01 23:54:45 · 855 阅读 · 0 评论 -
Oracle之位图索引
前两天看到有个SQL 查询的,当走位图索引的时候非常慢,当不走索引的事情反而更快一点。趁机会了解学习下。先看一个数据表的结构,WORKERSIDNAMESEXDEPTAGEHIREDATE1zhangsanMaleDOM1232017092lisiFemaleDOM1352017073wangwuMaleDOM2262017044maliuFemaleDOM2282013015zhaoqiMale...原创 2017-11-02 14:58:02 · 483 阅读 · 0 评论 -
Oracle执行计划
执行计划有时候我们要分析某条SQL的性能问题,通常做法是先看执行计划。通过执行计划看 SQL 执行的瓶颈,比如内存消耗、行源和时间。因此弄懂执行计划也就成了SQL优化的必备技能。在Oracle 中有三种方式查看执行计划。autotrace这种方式在 PLSQL Developer 中很常见,而且提供了多种参数选择。如下:序号命令说明1原创 2017-09-12 11:32:57 · 580 阅读 · 0 评论 -
Oracle取整
Oracle中有几个函数可以帮助我们对数字类型数据取整,不过它们又有所区别。取整小数取整,分为向上取整和向下取整。--1.取整(向上)SELECT CEIL(-1.001) negative_value, CEIL(1.001) positive_value FROM dual WHERE ROWNUM = 1;输出NEGATIVE_VALUE POSITIVE_VALUE-1原创 2017-08-17 16:49:27 · 1987 阅读 · 0 评论 -
Oracle IN 突破1000
关键字IN我们知道oracle sql 语句in子句中(where id in (1, 2, ..., 1000, 1001)),如果子句中参数超过1000项就会报错。如下:其实这主要是oracle考虑性能问题做的限制。方案如果要解决可以把字句进行拆分。如下:where id IN(1, 2, ..., 1000) OR id IN (1001, ...)通原创 2016-05-12 18:05:28 · 375 阅读 · 0 评论 -
SQL 分析函数之KEEP (DENSE_RANK FIRST/LAST)
KEEP (DENSE_RANK FIRST/LAST)原创 2016-04-19 14:53:23 · 7375 阅读 · 0 评论 -
ROW_NUMBER函数用法
场景在查询中,我们会用到将数据分组成几类,然后在每一类中进行排序,给一等级。例如查询一个年各个班级内的排名。数据首先准备我们的数据。创建了一张表,利用sequence向里面插入了8条数据。CREATE TABLE KAKA_STUDENT( ST_ID NUMBER(10) PRIMARY KEY, NAME VARCHAR2(20), CLASS_NAME VARCH原创 2016-04-19 17:47:21 · 1979 阅读 · 0 评论 -
SQL统计数据量
统计数据很多时候遇到统计数据的问题,比如统计半年,每个月,每天24小时等等。每月假定数据库中为varchar2,如20160331165124.474SELECT CYear, CMonth,--, CDay ,CHour,CMin, count(1) from (SELECT * FROM(SELECT to_date(substr(o.create_iodt,0,8),原创 2016-04-07 18:24:48 · 2115 阅读 · 0 评论 -
RANK、DENSE_RANK以及ROW_NUMBER区别
场景数据库查询中,很多时候都会遇到对数据进行分组,然后组内排序加序号的需求。应用对于组内排序一般有三个函数可供使用,它们是RANK()、DENSE_RANK()以及ROW_NUMBER()。它们都是对分过组的数据排序加序号,不过又有各自的区别。语法它们的语法是一样的,如下:ROW_NUMBER() OVER([PARTITION BY col1] ORDER BY col2原创 2016-04-20 16:54:52 · 5161 阅读 · 1 评论 -
START WITH CONNECT BY PRIOR 实现递归查询
Oracle递归查询原创 2016-12-05 15:45:51 · 317 阅读 · 0 评论 -
Oracle 行转列和列转行
场景在生成报表的时候,很多时候对某列取值固定或者有限的几个值时,进行转列分析。如下:facility列取值只有四种,每种一列,遇到相同facility求和。如下图:实现方式DECODE利用DECODE函数、聚合函数SUM、GROUP BY分组实现。WITH CO_ORDER AS( SELECT 'DOM1' Customer, 'ZHA01' fa原创 2016-05-16 18:37:58 · 21791 阅读 · 0 评论 -
Oracle之TRIM、LTRIM和RTRIM
最近发现一段对字符串进行trim 的SQL,发现LTRIM、RTRIM和TRIM 在ORACLE中的用法还是很强大的。作用三个函数功能都是对字符串进行前后去除一部分操作。但是又有点区别。先看下对比。SELECT TRIM(BOTH '-' FROM '----FFF----ggggg----' ) AS trim_both,TRIM( '-' FROM '----FFF----ggg原创 2017-07-25 09:45:53 · 1162 阅读 · 0 评论 -
LISTAGG 行转列
写SQL遇到一个行转列问题。Oracle提供了LISTAGG()可供使用。语法如下LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX) 用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。原创 2016-03-10 09:51:47 · 573 阅读 · 0 评论