数据库
文章平均质量分 69
DB2 Oracle MYSQL的学习
技术无产者
心之所向,素履以往,生如逆旅,一苇以航!
展开
-
数据库笔记
【代码】数据库笔记。原创 2023-03-30 11:51:03 · 930 阅读 · 0 评论 -
一个字符究竟占多少字节辨析
字符和字节的换算,则与编码方式有关,不同的字符所占的字节是不同的。: ASCII码: 一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。如一个ASCII码就是一个字节。 UTF-8编码: 一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。 Unicode编码: 一个英文等于两个字节,一个中文(含繁体)等于两个字节。 UTF-16编原创 2022-02-27 11:58:46 · 3600 阅读 · 0 评论 -
MySql字段类型的选择
1.主键设计主键不要与业务逻辑有所关联,最好是毫无意义的一串独立不重复的数字,且自增,最好设计为Long类型,对应MySQL的bigintbigint详解:MySQL_bigint(20) 是什么意思? - 根号829 - 博客园2.关于外键 尽量不要建立外键,保证每个表的独立性。如果非得保持一定的关系,最好是通过id进行关联,我们使用业务进行管理,否则每次删除或更新都会关联查询,性能差,可以把这个逻辑放在业务层里,避免额外的查询3.动静分离 最好做好静态表和动态...原创 2022-02-27 11:46:39 · 2838 阅读 · 0 评论 -
索引的选择从AVL树平衡二叉树到B+树
前置知识:1>索引是存在于索引文件中,是一种数据结构,存在于磁盘中的。因为索引通常是很大的,因此无法一次将全部索引加载到内存当中,因此每次只能从磁盘中读取一个磁盘页的数据到内存中。而这个磁盘的读取的速度较内存中的读取速度而言是差了好几个级别。2>传统用来搜索的平衡二叉树有很多,如 AVL 树,红黑树等。这些树在一般情况下查询性能非常好,但当数据非常大的时候它们就无能为力了。原因当数据量非常大时,内存不够用,大部分数据只能存放在磁盘上,只有需要的数据才加载到内存中。一般而言内存访问的时间约原创 2022-01-24 10:36:08 · 317 阅读 · 0 评论 -
为什么Mysql有了缓存,还要使用Redis作为缓存
MySQL Query Cache优缺点 优点: Query Cache的查询,发生在MySQL接收到客户端的查询请求、查询权限验证之后和查询SQL解析之前。也就是说,当MySQL接收到客户端的查询SQL之后,仅仅只需要对其进行相应的权限验证之后,就会通过Query Cache来查找结果,甚至都不需要经过Optimizer模块进行执行计划的分析优化,更不需要发生任何存储引擎的交互。由于Query Cache是基于内存的,直接从内存中返回相应的查询结果,因此减少了大量的磁盘I/...转载 2021-12-28 10:19:08 · 1192 阅读 · 1 评论 -
共享锁和排它锁的理解
基本的封锁类型有两种: 排它锁(X锁)和共享锁(S锁).所谓X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A,...所谓S锁,是事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁 若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行更新(S锁因此又称为读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁,从而可以读取A,但不能更新A. 若事务T1对数据A加了排他锁,但是事务T2只想读数据A而不修...原创 2021-12-27 10:20:47 · 686 阅读 · 0 评论 -
对事务一致性的理解
teacher 表:事务1:事务2:1>如事务1和事务2在对方没有提交或回滚前都开启了2> 在一个事务1中对某行数据进行修改(update teacher set core=666 where core= -222;)3>在另一个事务2中提前执行了update teacher set core=888 where core=-222;4>如果事务1先执行这条update语句,在事务1没有提交时事务2 也执行了updat...原创 2021-12-23 17:27:14 · 936 阅读 · 0 评论 -
Sqlserver事务发布实现数据同步功能
这里以sqlserver2008的事务发布功能为例,对发布订阅的方式简要介绍一下操作流程 首先,在要发布的数据库上创建一个我们的产品数据库(这里叫做dnt_new),然后在该数据库实例的左侧导航的“复制”--“本地发布”上击右键,然后选择“新建发布”,如下: 这样,系统就会启动‘发布向导’来引导大家,这里我们在欢迎界面下点击"下一步”,然后在当前窗口中选择要发布的数据库,如下: 点击下一步,然后在接下来的窗口中选择“事务发布”,如下图:...原创 2021-06-11 22:00:27 · 503 阅读 · 1 评论 -
SqlServer基于日志的事务同步原理
对于SqlServe的事务同步部署的教程有很多,这篇文章主要讲解SqlServer事务同步的原理。首先,对于SqlServer的事务复制是基于事务日志来对数据进行同步的,它采用的是发布订阅者模式,这个方案牵扯到了三台服务器,分别是发布者服务器,分发服务器,订阅者服务器(当然这三个服务器不是指的必须是三台主机,指的是数据库服务器)具体流程:1>初始化时,会通过快照的形式将初始数据集同步到订阅服务器(默认是快照,也可以通过手工备份等方式来初始化数据库)2>接下来,日志读取器代理监视为..原创 2021-04-23 15:22:01 · 849 阅读 · 0 评论 -
count(1)、count(*)与count(列名)的执行区别
执行效果:1.count(1) and count(*)当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!从执行计划来看,count(1)和count(*)的效果是一样的。 但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少。如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用c...转载 2021-03-30 08:24:58 · 202 阅读 · 0 评论 -
SQL语句总结---自用
1.写sql语句时,查询出来的数据相当于一个新的表,select 后面查的列属性就是这个新表的字段,可以把他当成在数据库里查表一样操作原创 2021-01-03 20:45:07 · 119 阅读 · 0 评论 -
DB2数据库查询过程(Query Processing)----表扫描与I/O(Table Scan and I/O)
表扫描开销在《DB2数据库查询过程(Query Processing)----概述》一文中已经介绍过,表扫描是数据访问方式中最简单,最低效的一种。在所有的关系型数据库中都会有这种数据访问方式,不同系统中叫法可能不同(如direct search 、 data scan 、 tables scan),由于存在不同的表共用同一个Extent的情况,有时候人们认为将这种扫描方式称为表空间扫描(Tablespace Scan)更为确切。表扫描准确的说叫全表扫描,顾名思义,是指通过扫描表中的所有行来找到查询语转载 2021-01-02 21:48:14 · 771 阅读 · 0 评论 -
深入理解DB2索引(Index)
索引(Index)是数据库管理系统中一个非常重要的数据结构,索引的合理使用能够极大提高数据库系统的性能。那么,什么是索引?索引有时如何提高数据库系统性能的呢?阅读本文时建议参考:《深入理解数据库磁盘存储(Disk Storage)》索引概念以一本书为例,通常一本书开头会有目录,而后才是正文,通过目录中每行左侧的标题和右侧的页码,我们可以快速定位到需要阅读的页面,而无需一页一页翻阅到该页面。数据库中的索引就像目录,它能帮助数据库管理系统快速定位到表中符合查询条件的数据行。索引实际上也是数据表的组成转载 2020-12-31 17:21:39 · 1770 阅读 · 0 评论 -
Sql中为什么要小表驱动大表,以及In以及exists的使用对比
分析mysql的join实现原理是,以驱动表的数据为基础,“嵌套循环”去被驱动表匹配记录,select * from a join b on a.bid =b.id假设 a表10000数据,b表20数据这里有2个过程,b 表数据最少,查询引擎优化选择b为驱动表,循环b表的20条数据, 去a表的10000数据去匹配,这个匹配的过程是B+树的查找过程,比循环取数要快的多。小表驱动的方式for 20条数据 匹配10000数据(根据on a.bid=b.id的连接条件,进行B+树原创 2020-12-30 14:48:56 · 3907 阅读 · 0 评论 -
Sql exists/not exists 的用法
exists指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。具体sql语句如下:SELECT `user`.*FROM `user`WHERE EXISTS ( SELECT `order`.user_id FROM `order` WHERE `user`.id = `order`.原创 2020-12-29 18:07:42 · 1333 阅读 · 0 评论 -
DB2数据库查询过程(Query Processing)----简单索引访问(Simple Indexed Access)
索引对于数据库的性能有着举足轻重的作用。上一篇文章已经介绍了没有索引的情况下表扫描访问相关知识,本文讨论有索引的情况下数据库系统如何使用索引进行数据访问,内容会比较复杂,强烈建议参看《深入理解DB2索引(Index)》,理解DB2索引的结构,特别是B+树后再阅读本文,否则看起来可能会比较吃力。由于“基于索引的访问”内容比较庞杂,现在只准备介绍对于一张表使用索引的情况,不考虑多表连接的问题。分三篇进行介绍,这一篇先介绍简单索引访问,下一篇介绍匹配索引扫描和复合索引,最后再介绍一下多索引访问。基于索引的转载 2020-12-23 16:20:14 · 676 阅读 · 0 评论 -
DB2数据库查询过程(Query Processing)----复合索引的匹配索引扫描(Matching Index Scans with Composite Indexs)
在《DB2数据库查询过程(Query Processing)----简单索引访问(Simple Indexed Access)》一文中已经对索引访问的各种形式作了详细介绍,本文重点讨论匹配索引扫描对于复合索引的种种情况应该如何进行索引的选择。复合索引(Composite Index)索引列(搜索码)由多个表列共同组成的索引称为复合索引,相对的,索引列仅是单个表列的索引称为单列索引。例如语句:CREATE INDEX PHONEBOOK_IDX ONPHONEBOOK(LASTNAME,FI...转载 2020-12-23 15:36:34 · 550 阅读 · 0 评论 -
数据库查询优化器
引言我们知道,目前通用的数据库查询语言是SQL语言(Structured Query Language)。SQL语言也是一种编译型语言,需要SQL编译器编译后才能执行,但它与C、C++、Java等语言不同,SQL语言是一种非过程化语言,这意味着使用SQL进行操作的时候,你只需要指定你要达到什么目的,而无需指明要怎样达到目的。比如要查询EMPLOYEE的所有行,使用语句“Select * From EMPLOYEE”就行了,不需要规定该怎样查询这些行。既然用户只需要解决“做什么”的问题,那么,“怎么做转载 2020-12-17 15:19:32 · 1360 阅读 · 1 评论 -
[数据库] 理解数据库范式-通俗易懂
[数据库] 理解数据库范式-通俗易懂 转自:http://blog.chinaunix.net/uid-10073362-id-225057.html 数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率、优雅的数据库。甚至设计出错误的数据库。而想要理解并掌握范式却并不是那么容易。教科书中一般以关系代数的方法来解释数据库范式。这样做虽然能够十分准确的表达数据库...转载 2020-04-15 20:04:25 · 1173 阅读 · 0 评论