数据库
colie_li
coding
展开
-
mysql索引底层实现
MySQL 的常用引擎1. InnoDBInnoDB 的存储文件有两个,后缀名分别是 .frm 和 .idb,其中 .frm 是表的定义文件,而 idb 是数据文件。InnoDB 中存在表锁和行锁,不过行锁是在命中索引的情况下才会起作用。InnoDB 支持事务,且支持四种隔离级别(读未提交、读已提交、可重复读、串行化),默认的为可重复读;而在 Oracle 数据库中,只支持串行化级别和读已提交这两种级别,其中默认的为读已提交级别。2. MyisamMyisam 的存储文件有三个,后缀转载 2020-11-12 01:46:44 · 614 阅读 · 0 评论 -
创建高性能索引
索引是提高MySQL查询性能的一个重要途径,但过多的索引可能会导致过高的磁盘使用率以及过高的内存占用,从而影响应用程序的整体性能。应当尽量避免事后才想起添加索引,因为事后可能需要监控大量的SQL才能定位到问题所在,而且添加索引的时间肯定是远大于初始添加索引所需要的时间,可见索引的添加也是非常有技术含量的。接下来将向你展示一系列创建高性能索引的策略,以及每条策略其背后的工作原理。但在此之前,先了解与索引相关的一些算法和数据结构,将有助于更好的理解后文的内容。索引相关的数据结构和算法通常我们所说的索转载 2020-11-12 00:41:35 · 139 阅读 · 0 评论 -
什么是列式存储数据库
列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。按列存储每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,一个字段的数据聚集存储,那就更容易为这种聚集存储设计更好的压缩/解压算法。传统的行存储和列存储的区别1、数据是按行存储的2、没有索引的查询...转载 2019-11-11 11:57:27 · 2466 阅读 · 0 评论 -
MySQL异常字符
简单描述 原因是字符串中的一个空格(ASCII:32)被UTF-8编码之后变成了字符(ASCII:194 和 160的组合)。在 UTF-8编码里面存在一个特殊的字符,其编码是“0xC2 0xA0”,转换成字符的时候表现为一个半角空格,跟一般的半角空格(ASCII 0x20)不同的是它的宽度不会被压缩,所以排版中常能用到它。但是GB2312、Unicode之类并没有这样的字符,所以转换后前台...原创 2018-03-08 16:07:29 · 527 阅读 · 0 评论 -
MySQL只能使用一个索引
那么,如果在firstname、lastname、age这三个列上分别创建单列索引,效果是否和创建一个firstname、lastname、 age的多列索引一样呢?答案是否定的,两者完全不同。当我们执行查询的时候,MySQL只能使用一个索引。如果你有三个单列的索引,MySQL会试图选择一个限制最严格的索引。但是,即使是限制最严格的单列索引,它的限制能力也肯定远远低于firstname、las...原创 2018-03-07 17:33:11 · 4849 阅读 · 1 评论 -
c3p0详细配置
c3p0详细配置官方文档 : http://www.mchange.com/projects/c3p0/index.html3301000falseTestfalse100测试连接。类名需制定全路径。 Default: com.mchange.v2.c3p0.impl.DefaultConnectionTe转载 2017-11-22 19:17:34 · 303 阅读 · 0 评论 -
join运行机制
今天遇到一个left join优化的问题,搞了一下午,中间查了不少资料,对MySQL的查询计划还有查询优化有了更进一步的了解,做一个简单的记录: select c.* from hotel_info_original c left join hotel_info_collection h on c.hotel_type=h.hotel_type and c.hotel_id =h.转载 2017-11-13 13:13:14 · 427 阅读 · 0 评论 -
互联网“平滑数据迁移”架构技术实践
一、问题的提出互联网有很多“数据量较大,并发量较大,业务复杂度较高”的业务场景,其典型系统分层架构如下:上游是业务层biz,实现个性化的业务逻辑中游是服务层service,封装相对通用的数据访问下游是数据层db,存储固化的业务数据服务化分层架构的好处是,服务层屏蔽下游数据层的复杂性,例如缓存、分库分表、存储引擎等存储细节不需要向调用方暴露,而只向上游提供方便的RPC访问接口。当转载 2017-10-18 20:30:33 · 1711 阅读 · 0 评论 -
数据库设计---关于建表的时候选择横表和竖表(纵表)的一点思考
在做数据统计类数据库设计的时候,在考虑数据存储的时候,经常会遇到逻辑上同一个BusinessID对应多个数据点的情况,比如工资表中的员工ID以及各项工资信息,财务表中的各个报表Id和多个数据点之间的信息面对这种情况,如何来设计表结构,是横表,还是竖表,各有那些优缺点,本文将做一个粗浅的分析。 本文出处:http://www.cnblogs.com/wy123/p/6677073.h转载 2017-07-28 16:42:37 · 1034 阅读 · 0 评论 -
linux 配置mysql
1、下载 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 下载版本:我这里选择的5.6.33,通用版,linux下64位 也可以直接复制64位的下载地址,通过命令下载:wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-l原创 2017-06-20 18:36:17 · 322 阅读 · 0 评论 -
你不得不知道的 MySQL 优化原理
说起MySQL的查询优化,相信大家收藏了一堆奇淫技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。MySQL逻辑架构如果能在头脑中构建一原创 2017-05-08 14:03:55 · 1995 阅读 · 0 评论 -
MySql数据库索引原理
第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。第二部分结合MySQL数据库中InnoDB数据存储引擎中索引的架构实现讨论聚集索引、非聚集索引及覆盖索引等话题。第三部分讨论MySQL中高性能使用索引的策略。 一、数据结构及算法理论 Innodb存储引擎实现索引的数据结构是B+树,下面介绍几种数据结构,一步步阐述为什么要使用B+转载 2017-05-11 21:53:55 · 409 阅读 · 0 评论 -
深入理解Mysql 工作原理
刚开始接触一个新的事物的时候,我觉得很有必要从其工作原理入手,弄清楚这个东西的来龙去脉,为接下来的继续深入学习做好铺垫,掌握好其原理有助于我们从整体上来把握这个东西,并且帮助我们在排错过程中理清思路。接下来,还是从mysql的工作原理开始入手,下面先来一张经典的图: 上面的图就是mysql的内部架构,可以清楚的看到Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成转载 2018-04-12 11:57:25 · 1300 阅读 · 0 评论 -
EXPLAIN 命令详解
在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算完事,我们还需要知道该SQL的执行计划,比如是全表扫描,还是索引扫描,这些都需要通过EXPLAIN去完成。EXPLAIN命令是查看优化器如何决定执行查询的主要方法。可以帮助我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时...转载 2018-06-27 18:43:04 · 253 阅读 · 0 评论 -
Navicat Premium Mac 12 破解
https://blog.csdn.net/xhd731568849/article/details/79751188转载 2019-08-12 01:42:01 · 629 阅读 · 0 评论 -
关于分布式事务、两阶段提交协议、三阶提交协议
分布式一致性回顾在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结了许多典型的协议和算法。其中比较著名的有二阶提交协议(Two Phase Comm...转载 2019-04-08 20:33:31 · 180 阅读 · 0 评论 -
分布式事务 - 两阶段提交与三阶段提交
在分布式系统中,著有CAP理论,该理论由加州大学伯克利分校的Eric Brewer教授提出,该理论阐述了在一个分布式系统中不可能同时满足一致性(Consistency)、可用性(Availability),以及分区 容错性(Partition tolerance)。一致性 在分布式系统中数据往往存在多个副本,一致性描述的是这些副本中的数据在内容和组织上的一致。 可用性 可用性描述了系统对...转载 2019-04-08 20:30:13 · 166 阅读 · 0 评论 -
MySQL GIS 的支持
原文:https://yq.aliyun.com/articles/50625一直以来MySQL在GIS上的功能支持都比较弱,并且仅有MyISAM引擎支持。很高兴的看到MySQL5.7将这个短板补上了,实现了InnoDB引擎的GIS支持,现在对GIS数据可以支持完整的MVCC和事务特性。在MySQL5.7版本里,针对GIS特性主要做了几点改进:InnoDB支持Spatial Index,可...转载 2018-10-13 22:09:00 · 7399 阅读 · 0 评论 -
Mysql计算经纬度距离
mysql 5.6.1 加入了空间数据支持功能,新增了st_*相关函数,可以非常方便的计算两个地理坐标点的距离了。st_distance如下例子:按我的坐标计算周边坐标的距离并由近到远排序select name,st_distance(point(113.327955,23.129717),point)*111195 as distance,address from table1 wh...转载 2018-10-13 22:06:51 · 8492 阅读 · 0 评论 -
mysql自定义公式计算经纬度距离含具体sql语句
文章转载地址 http://blog.sina.com.cn/s/blog_7bbfd5fd01017d1e.html 感谢作者。在原文的基础上,我新增了sql语句,方便大家理解mysql距离计算,单位m,以及排序lon 经度 lat 纬度一般地图上显示的坐标顺序为,纬度在前(范围-90~90),经度在后(范围-180~180)首先新建一张表,里面包含经纬度 1 ...转载 2018-10-13 22:02:06 · 1222 阅读 · 0 评论 -
Druid设置连接归还时间
今天在一台配置很低的机器上运行批量更新的程序~~~ 大概跑了三十分钟~~~这配置~~~这程序~~~ 然后华丽丽的报异常了~~~ 具体异常是这样的,DEBUG: (BaseJdbcLogger.java:132) ooo Using Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@4d...转载 2018-10-13 21:59:25 · 6226 阅读 · 0 评论 -
DRUID应用
配置参数 和其它连接池一样DRUID的DataSource类为:com.alibaba.druid.pool.DruidDataSource,基本配置参数如下: 配置 缺省值 说明 name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。 如果没有配置,将会生成一个名字,格式是:"DataSource...转载 2018-10-12 11:36:09 · 212 阅读 · 0 评论 -
基于MYSQL获取地理位置附近的点
由于最近一年多大部分都做的是LBS相关项目,发现现在安全、社交、O2O等等的手机APP都会使用LBS技术,基于LBS位置服务的APP用户体验会更好,也更容易挖掘到用户真正的需求。下面总结了两个项目中“附近的”解决方案仅供参考,有什么问题欢迎指正。1、近似(矩形范围内)实现原理简单粗暴,先算出该点周围的矩形的四个点,然后使用经纬度去直接匹配数据库中的记录(参考)<span s...转载 2018-09-26 14:47:08 · 2288 阅读 · 0 评论 -
innodb锁机制
innodb 实现了行锁机制,这是它相对 myisam 的最大优点之一。但是它的行锁是一种基于索引的“准行锁”,也就是说,只有通过索引检索数据才会加行锁,否则加的将是表锁。而且对于相同索引的不同记录,innodb 加的是同一个锁。例如: select * from t where name = “iknow” for update;只有当你在 name 字段建了索引,innodb 才会给以原创 2017-02-13 17:50:36 · 401 阅读 · 0 评论 -
mysql索引深入理解
详解b+树如上图,是一颗b+树,关于b+树的定义可以参见B+树,这里只说一些重点,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、原创 2017-02-13 17:27:40 · 1004 阅读 · 0 评论 -
mysql乐观锁总结和实践
最近学习了一下数据库的悲观锁和乐观锁,根据自己的理解和网上参考资料总结如下: 悲观锁介绍(百科):悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制转载 2016-02-26 19:42:58 · 2956 阅读 · 0 评论 -
Mysql或者Hive数据行变成列
对于mysql / hive 再进行统计的时候如果需要行变成列,可以使用函数CASE 字段a WHEN 值b THEN c [WHEN d THEN e]* [ELSE f] END 当字段a=值b时,返回c(如果是字段的话则代表该字段的值,也可以是一个固定值 加单引号就可以);当a=d时,返回e,否则返回f。如:数据表结构:(举例说明,id有重复的)原创 2015-07-29 20:17:29 · 1149 阅读 · 0 评论 -
primary key与unique的区别
定义了 UNIQUE 约束的字段中不能包含重复值,可以为一个或多个字段定义UNIQUE 约束。因此,UNIQUE 即可以在字段级也可以在表级定义, 在UNIQUED 约束的字段上可以包含空值。ORACLE自动会为具有PRIMARY KEY 约束的字段(主码字段)建立一个唯一索引和一个NOT NULL约束,定义PRIMARY KEY约束时可以为它的索引; UNIQUED 可空,可以在一个转载 2015-06-24 15:21:23 · 610 阅读 · 0 评论 -
MySQL死锁分析及解决的方法
MySQL死锁问题的相关知识是本文我们主要要介绍的内容,接下来我们就来一一介绍这部分内容,希望能够对您有所帮助。 1、MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 InnoDB支持行级锁(row-level loc转载 2015-03-12 17:48:39 · 612 阅读 · 0 评论 -
通过show status 来优化MySQL数据库
1, 查看MySQL服务器配置信息 Java代码 mysql> show variables; 2, 查看MySQL服务器运行的各种状态值 Java代码 mysql> show global status; 3, 慢查询 Java代码 mysql> show variables l转载 2015-03-12 17:25:21 · 526 阅读 · 0 评论 -
MySQL死锁问题实例分析及解决方法
MySQL死锁问题的相关知识是本文我们主要要介绍的内容,接下来我们就来一一介绍这部分内容,希望能够对您有所帮助。 1、MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 InnoDB支持行级锁(row-level loc转载 2015-03-12 12:57:11 · 1328 阅读 · 0 评论 -
数据库死锁的解决办法
近日在博客网站上,回复别人的数据库死锁避免问题,之前也曾经几次答复过同样的内容,觉得很有必要汇聚成一个博客文章,方便大家。这里的办法,对所有的数据库都适用。 这个解决办法步骤如下:1. 每个表中加 updated_count (integer) 字段 2. 新增一行数据,updated_count =0 :insert into table_x转载 2015-03-12 17:11:19 · 2176 阅读 · 0 评论 -
乐观锁与悲观锁
锁( locking ) 这个概念在我们学习多线程的时候曾经接触过,其实这里的锁和多线程里面处理并发的锁是一个道理,都是暴力的把资源归为自己所有。这里我们用到锁的目的就是通过一些机制来保证一些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无法被其他程序修改。悲观锁( Pessimistic Locking )依赖数据的原创 2014-12-27 21:49:37 · 814 阅读 · 0 评论 -
Mysql 的 Cascade Restrict
今天遇到数据库的一个问题,就是每当从主表中删除一个主键id时,由于与他相关联的表中有相关的字段数据,所以无法删除。查了一大堆资料,发现我建表关联用的是on Restrict.可能问题就出在这里吧。 外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/update 外键约束对父表的含义: 在父表上进行update/delete以更新或删转载 2014-12-12 14:18:03 · 1237 阅读 · 0 评论 -
SQL的GROUP by
GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想你用了GROUP BY 按 ITEM.ITEMNUM 这个字段分组,那其他字段内容不同,变成一对多又改如何显示呢,比如下面所示A B1 abc1 bcd1 asdfgselect A,B from table group by A你说这样查出来是什么结果,A B a原创 2014-12-12 15:32:06 · 504 阅读 · 0 评论 -
MySQL详解--锁
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。本章我们着重讨论MySQL锁机制的特点,常见的锁问题,以及解决MySQL转载 2016-01-16 00:53:54 · 537 阅读 · 0 评论 -
MySQL数据库事务隔离级别(Transaction Isolation Level)
数据库隔离级别有四种,应用《高性能mysql》一书中的说明: 然后说说修改事务隔离级别的方法:1.全局修改,修改mysql.ini配置文件,在最后加上1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.2 [mysqld]3 transaction-isolation转载 2016-01-16 02:11:03 · 420 阅读 · 0 评论 -
联合索引使用规则
假设某个表有一个联合索引(c1,c2,c3,c4)一下——只能使用该联合索引的c1,c2,c3部分A where c1=x and c2=x and c4>x and c3=xB where c1=x and c2=x and c4=x order by c3C where c1=x and c4= x group by c3,c2D where c1=? and c5=? ord转载 2017-02-11 01:29:28 · 3280 阅读 · 0 评论 -
数据库管理基础
关系型数据库:存储下来表现为表,但表中数据不能过度冗余(由行和列组成的二维表),一个表可以没有行但必须有一个列;最终提供的数据就是行,跟列关系不大,列只是说明其是什么属性数据库的模型:·数据模型·层次模型·网状模型·关系模型·非关系模型:(在某种特定场景当中能够满足某种特殊应用的数据模型机制)DBMS:数据库管理系统基本概念比如:如果我们的数据只像某一个文件 ,转载 2017-02-09 00:48:26 · 597 阅读 · 0 评论 -
Mybatis原生的连接池的实现
一句话概括Mybatis的连接池:最保守的数据库连接池。 这里分析的是Mybatis3的代码,有什么问题,欢迎大家拍砖。 首先看代码树: datasource目录下就是连接池全部的代码,和DBCP以及C3P0比起来简直是简单到极致。 主要关注三个类 PooledConnection、Pool原创 2016-12-10 11:02:18 · 2508 阅读 · 0 评论