![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 78
wangfy_
这个作者很懒,什么都没留下…
展开
-
转载:LSM Tree 一种支持高效读写的存储引擎
写数据时,首先将数据缓存到内存中的一个有序树结构中(称为 memtable)。同时触发相关结构的更新,例如布隆过滤器、稀疏索引。当 memtable 积累到足够大时,会一次性写入磁盘中,生成一个内部有序的 segment 文件。该过程为连续写,因此效率极高。进行查询时,首先检查布隆过滤器。如果布隆过滤器报告数据不存在,则直接返回不存在。否则,按照从新到老的顺序依次查询每个 segment。在查询每个 segment 时,首先使用二分搜索检索对应的稀疏索引,找到数据所在的 offset 范围。转载 2024-07-04 21:50:50 · 18 阅读 · 0 评论 -
######## mysql各章节终篇索引 ########
####【终篇】mysql 事务及其实现 ####-CSDN博客https://blog.csdn.net/chushoufengli/article/details/107283914 #### innodb中各种SQL语句 加锁分析 ####_innodb select语句会加锁么-CSDN博客 #### innodb中的更新语句,执行流程 ####_innodb在执行更新操作时是查询后才做吗-CSDN博客#### innodb中的更新语句 在不同隔离级别下的加锁分析(主要看RR级别) ####_inn原创 2024-06-05 18:13:55 · 257 阅读 · 0 评论 -
es空间检索
方案优化的探索是没有没有止境的,Lucene的核心工程师 Michael McCandless受到论文《Bkd-Tree: A Dynamic Scalable kd-Tree》启发,基于BKD tree再次升级了地理位置数据索引建模和查询功能。在前面的版本中,对于数值区间查询的处理思路本质上都是term匹配,通过前缀实现了一个term管理一个区间,从而降低了区间查询需要遍历的term数量。搜索的时候,就不再是像Quadtree从整个世界开始定位,而是基于当前的点集合形成的空间来查找。转载 2023-02-02 17:39:22 · 626 阅读 · 0 评论 -
#### 距离的存储/检索/排序 ####
例如:东圃幼儿园的GeoHash是wtw3ued9m,查询1KM内的幼儿园时, 使用SELECT * FROM xxx WHERE 存储GeoHash的字段 like 'wtw3ued%';Geohash算法是一种地址编码,它能把二维的经纬度编码成一维的字符串,存到mysql的一列string类型即可,查询时计算处置后再查询。根据维基百科的球面计算公式,根据圆心坐标计算正方形四个点的坐标,查询正方形内的目标点。有误差,索引利用率不高,不易缓存,距离无序。缺点:查询语句长,索引效率差。有误差,边界8区问题。原创 2023-02-02 17:31:16 · 217 阅读 · 0 评论 -
各种空间索引方案对比
redis,一个功能强大、效率极高的缓存数据库(或许已经不仅仅是缓存数据库了),已经成为类似于关系存储型数据库在各个项目中不可或缺的组件了。首先考虑它是因为它的效率有保障,而且项目中几乎必备,运维代价很低。Redis 的 空间索引采用 GeoHash 原理,配合集合存储,查询效率接近 log(N)。Redis 3.0 以上版本支持空间索引,新项目不必考虑这些,而一般的老项目可能就需要升级 Redis 了,另外 PHP 中可能还要升级 Redis 的扩展,以支持 Redis 的空间索引函数。转载 2023-02-02 17:28:21 · 562 阅读 · 0 评论 -
ClickHouse 数据存储形式 及 索引原理
1、列式数据库,对比于行式数据库mysql查询提升200倍,ClickHouse你值得拥有! - 掘金2、索引原理,稀疏索引,及查询流程ClickHouse的索引原理 - 掘金3、索引原理 【ClickHouse内核】MergeTree索引相关基础知识点_Night_ZW的博客-CSDN博客转载 2022-10-08 19:45:23 · 690 阅读 · 0 评论 -
mysql字段类型里的int、bigint、int(11)等之间区别
只是在数字的显示效果上不同,int(11)是数值不到11位时前补0,而int(1)不会。需要注意,该定义需要与ZEROFILL一起使用,加上ZEROFILL后的int指的是UNSIGNED。如果创建字段时不指定int的显示宽度,则默认为int(11)。其实大多数情况下也没有这种补0的需求,而且也没加ZEROFILL,这个11也没什么用,但是几乎所有人都弄个int(11)。原创 2022-09-22 21:15:31 · 5045 阅读 · 0 评论 -
#### 联合索引存储结构 ####
例如表数据如下:bcd三列组成一个联合索引,在B+树上的结构图:对于联合索引来说只不过比单值索引多了几列,而这些索引列全都出现在索引树上。对于联合索引,存储引擎会首先根据第一个索引列排序,如上图我们可以单看第一个索引列,横着看, ,,c=4在c=5前面,以及,,就可以说明这种情况。`当我们的SQL语言可以应用到索引的时候,比如 也就是T1表中a列为4的这条记录。存储引擎首先从根节点(一般常驻内存)开始查找,第一个索引的第一个索引列为1,12大于1,第二个索引的第一个索引列为56,12小于56,于是从这.转载 2022-06-27 14:17:09 · 1454 阅读 · 2 评论 -
#### mysql为啥用b+树 以及各种查找树的比较 ####
转自【【深入学习MySQL】MySQL的索引结构为什么使用B+树? - 编程迷思 - 博客园】目录总结前言一、二叉查找树(BST):不平衡二、平衡二叉树(AVL):旋转耗时三、红黑树:树太高四、B树:为磁盘而生五、B+树六、感受B+树的威力总结最后,总结一下各种树解决的问题以及面临的新问题:1) 二叉查找树(BST):解决了排序的基本问题,但是由于无法保证平衡,可能退化为链表;2) 平衡二叉树(AVL):通过旋转解决了平衡的...转载 2022-03-16 13:31:25 · 186 阅读 · 1 评论 -
####【终篇】mysql 事务及其实现 ####
转自【深入学习MySQL事务:ACID特性的实现原理 - 编程迷思 - 博客园】先说总结:事务的ACID特性实现原理原子性:语句要么全执行,要么全不执行,是事务最核心的特性,事务本身就是以原子性来定义的;实现主要基于undo log 持久性:保证事务提交后不会因为宕机等原因导致数据丢失;实现主要基于redo log 隔离性:保证事务执行尽可能不受其他事务影响;InnoDB默认的隔离级别是RR,RR的实现主要基于锁机制(包含next-key lock)、MVCC(包括数据的隐藏列、基于und转载 2022-03-16 13:20:59 · 178 阅读 · 0 评论 -
#### 使用 binlog + canal + kafka 同步数据更新事件到redis或es等
部分内容摘自【基于Canal和Kafka实现MySQL的Binlog近实时同步 - 掘金】大致流程canal将binlog转到连接器kafka,接收方订阅topic消费后更新redis或escanal工作原理先看,MySQL主备复制原理:MySQL的Master实例将数据变更写入二进制日志(binary log,其中记录叫做二进制日志事件binary log events,可以通过show binlog events进行查看) MySQL的Slave实例将master的bina原创 2022-03-16 11:54:29 · 2652 阅读 · 0 评论 -
#### mysql主从复制 ####
部分内容摘自【mysql主从复制原理-binlog - 低调人生 - 博客园】【Mysql 实现基于binlog的主从同步 - 下班闪电去打卡 - 博客园】步骤从库会生成两个线程,一个I/O线程,一个SQL线程; I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中; 主库会生成一个log dump线程,用来给从库I/O线程传binlog; SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;.原创 2022-03-16 11:14:29 · 77 阅读 · 0 评论 -
区别:count(*)、count(1)、count(列名)
区别count(*) 包括了所有的列,相当于行数,在统计结果的时候, 不会忽略列值为NULL count(1) 包括了忽略所有列,用1代表代码行,在统计结果的时候, 不会忽略列值为NULL count(列名) 只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数, 即某个字段值为NULL时,不统计。执行效率【1】select count(主键)执行效率最优【2】count (1) 比 count (非主键列) 快如果表多...原创 2021-07-09 16:10:49 · 199 阅读 · 0 评论 -
#### explain ####
输出格式 id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符. select_type: SELECT 查询的类型. table: 查询的是哪个表 partitions: 匹配的分区 type: join 类型 possible_keys: 此次查询中可能选用的索引 key: 此次查询中确切使用到的索引. ref: 哪个字段或常数与 key 一起被使用 rows: 显示此查询一共扫描原创 2021-07-02 21:30:03 · 69 阅读 · 0 评论 -
防止混淆:index record lock 和 s锁 和 x锁
index record lock是从锁的作用范围来分类定义的,是和Gap Lock、Next-Key Lock一类的。s锁 和 x锁 是从读写来分类定义的。更多见:https://segmentfault.com/a/1190000023869573原创 2021-04-09 12:08:08 · 367 阅读 · 0 评论 -
#### innodb中各种SQL语句 加锁分析 ####
摘自:https://www.fordba.com/locks-set-by-different-sql-statements-in-innodb.html仅做个人备份,浏览请看原文1.SELECT ... FROM是一个快照读,通过读取数据库的一个快照,不会加任何锁,除非将隔离级别设置成了SERIALIZABLE。在SERIALIZABLE隔离级别下,如果索引是非唯一索引,那么将在相应的记录上加上一个共享的next key锁。如果是唯一索引,只需要在相应记录上加index reco...转载 2021-04-08 17:27:27 · 211 阅读 · 0 评论 -
#### innodb中的更新语句,执行流程 ####
转自:https://gsmtoday.github.io/2019/02/08/how-update-executes-in-mysql/仅做个人备份,浏览请看原文目录语句的执行过程MySQL基本架构Undo log 简述Change Buffer简述Redo log简述Redo log 特点WAL /redo log V.S. change buffer两阶段提交2PCupdate t set b = 200 where id = 2语句的执行..转载 2021-04-08 17:23:00 · 274 阅读 · 0 评论 -
#### 死锁 ####
转自:https://segmentfault.com/a/1190000038352601仅做个人备份,浏览请看原文目录如何避免死锁查看死锁解除死锁如何避免死锁阻止死锁的途径就是避免满足死锁条件的情况发生,为此我们在开发的过程中需要遵循如下原则:1.尽量避免并发的执行涉及到修改数据的语句。2.要求每一个事务一次就将所有要使用到的数据全部加锁,否则就不允许执行。3.预先规定一个加锁顺序,所有的事务都必须按照这个顺序对数据执行封锁。如不同的过程在事务内部对对..转载 2021-04-02 17:52:38 · 84 阅读 · 0 评论 -
#### mysql sql语句的加锁分析 ####
。原创 2021-04-02 17:52:07 · 380 阅读 · 1 评论 -
#### b树和b+树 的 区别和优点 ####
部分内容摘自:https://www.cnblogs.com/ivictor/p/5849061.html仅做个人备份,浏览请看原文区别有以下两点:1. B+树中只有叶子节点会带有指向记录的指针(ROWID 见下面的解释)【指的是非聚簇索引,而聚簇索引叶节点上的是数据,详见:https://blog.csdn.net/chushoufengli/article/details/115398743】,而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。2. B+树..转载 2021-04-02 16:32:02 · 112 阅读 · 0 评论 -
#### innodb索引在磁盘上的存储,以及叶子节点上的数据形式 ####
摘自:https://juejin.cn/post/6844903856388718606#heading-4https://my.oschina.net/xiaoyoung/blog/3046779仅做个人备份,浏览请看原文目录聚集索引知识点查找:假设要查找数据项6怎样选择聚集索引非聚集索引知识点查找:获取NAME=Jake的数据假设我们有一张这样的表,表中有如图2-0的数据CREATE TABLE `user` ( `ID` bigi..转载 2021-04-02 15:04:31 · 1836 阅读 · 0 评论 -
mysql架构里主要的三层
转自:https://blog.csdn.net/u014745069/article/details/103550621仅做个人备份,浏览请看原文连接层:MySQL的最上层是连接服务,引入了线程池的概念,允许多台客户端连接。主要工作是:连接处理、授权认证、安全防护等。连接层为通过安全认证的接入用户提供线程,同样,在该层上可以实现基于SSL 的安全连接。服务层:服务层用于处理核心服务,如标准的SQL接口、查询解析、SQL优化和统计、全局的和引擎依赖的缓存与缓冲器等等。所有的与存.转载 2021-03-22 16:45:26 · 227 阅读 · 0 评论 -
mysql三大日志-binlog、redo log、undo log
转自:https://juejin.cn/post/6860252224930070536仅做个人备份,浏览请看原文目录binlogbinlog使用场景binlog刷盘时机binlog日志格式redo log为什么需要redo logredo log基本概念redo log记录形式redo log与binlog区别undo log日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日.转载 2021-03-22 16:40:08 · 109 阅读 · 0 评论 -
gorm加锁操作
转自:https://blog.csdn.net/juzipidemimi/article/details/104502385仅做个人备份,浏览请看原文func UpdateUser(db *gorm.DB, id int64) error { tx := db.Begin() defer func() { if r := recover(); r != nil { tx.Rollback() } }() .转载 2021-03-22 10:08:41 · 3518 阅读 · 0 评论 -
mysql缓存
转自:https://zhuanlan.zhihu.com/p/55947158仅做个人备份,浏览请看原文一、前言在当今的各种系统中,缓存是对系统性能优化的重要手段。MySQL Query Cache(MySQL查询缓存)在MySQL Server中是默认打开的,但是网上各种资料以及有经验的DBA都建议生产环境中把MySQL Query Cache关闭。按道理,MySQL Server默认打开,是鼓励用户使用缓存,但是大拿们却建议关闭此功能,并且国内各个云厂商提供的MySQL云服务中默认都.转载 2021-03-15 20:44:00 · 3978 阅读 · 0 评论 -
LSM树 存储结构
转自:https://blog.csdn.net/las723/article/details/93767240仅做个人备份,浏览请看原文目录概念诞生的背景原理插入步骤合并步骤插入操作查找操作删除操作对比三种基本的存储引擎总结概念LSM树,即日志结构合并树(Log-Structured Merge-Tree)。其实它并不属于一个具体的数据结构,它更多是一种数据结构的设计思想。大多NoSQL数据库核心思想都是基于LSM来做的,只是具体的实....转载 2021-03-15 20:41:28 · 693 阅读 · 0 评论 -
#### mysql.innoDB的乐观锁mvcc机制 ####
转自:https://juejin.cn/post/6844904096378404872,仅做个人备份,浏览请务必看原文转自:https://juejin.cn/post/6844904096378404872,仅做个人备份,浏览请务必看原文转自:https://juejin.cn/post/6844904096378404872,仅做个人备份,浏览请务必看原文为了方便描述,首先我们创建一个表book,就三个字段,分别是主键book_id, 名称book_name, 库存stock..转载 2021-03-09 18:45:07 · 89 阅读 · 0 评论 -
#### 事务、并发问题、隔离级别、mysql.innoDB中的乐观锁(mvcc)和悲观锁 ####
三宗罪,事务并发可能出现的情况:1. 脏读概述:事务a读取,事务b修改2. 不可重复读概述:事务a读取,事务b修改3. 幻读概述:事务a读取,事务b插入针对三宗罪,得出的隔离级别:(在innoDB中,仅手动悲观锁的时候,而乐观锁mvcc不需要这样)READ UNCOMMITTED(读未提交)在读未提交隔离级别下,事务A可以读取到事务B修改过但未提交的数据。可能发生脏读、不可重复读和幻读问题,一般很少使用此隔离级别。READ COMMITTED(读提交)原创 2021-03-09 18:29:42 · 250 阅读 · 1 评论 -
#### MySQL并发控制:隔离级别、锁与MVCC ####
转自:https://juejin.cn/post/6844904096378404872,仅做个人备份,浏览请务必看原文转自:https://juejin.cn/post/6844904096378404872,仅做个人备份,浏览请务必看原文转自:https://juejin.cn/post/6844904096378404872,仅做个人备份,浏览请务必看原文前言如果数据库中的事务都是串行执行的,这种方式可以保障事务的执行不会出现异常和错误,但带来的问题是串行执行会带来性能瓶..转载 2021-03-09 18:29:13 · 107 阅读 · 0 评论 -
#### MySQL 事务的隔离级别 ####
转自:https://developer.aliyun.com/article/743691,仅做个人备份,浏览请务必看原文转自:https://developer.aliyun.com/article/743691,仅做个人备份,浏览请务必看原文转自:https://developer.aliyun.com/article/743691,仅做个人备份,浏览请务必看原文简介:MySQL的事务隔离级别一共有四个,分别是读未提交、读已提交、可重复读以及可串行化。事前准备数据m...转载 2021-03-09 18:28:50 · 169 阅读 · 0 评论 -
查询时间交集
return []M{ { "bool": M{ "must": []M{ { "range": M{ "start_at": M{ "lte": endAt.GetSeconds(), }, }, }, { "range": M{ "start_at": M{ "gte": startAt.GetSeconds(), }, .原创 2020-11-19 18:14:32 · 324 阅读 · 0 评论 -
TiDB查询date类型数据时无结果,使用cast(? as DATE)解决
问题起因TiDB某条记录有date字段字段,值例如为2020.09.14,sql直接使用:SELECT * FROM `rule_tag_ele_num` WHERE `rule_tag_ele_num`.`deleted_at` IS NULL AND ((tag_id = 1 AND date BETWEEN '2020-09-14 00:00:00' AND '2020-09-16 00:00:00'))查询的话,2020.09.14这条记录就不会返回,但是mysql是可以的,但是Ti.原创 2020-09-17 14:50:45 · 2470 阅读 · 0 评论 -
#### mysql 锁 ####
大厂面试官必问的Mysql锁机制原创黎杜非科班的科班6月22日前言前几天有粉丝和我聊到他找工作面试大厂时被问的问题,因为现在疫情期间,找工作也特别难找。他说面试的题目也比较难,都偏向于一两年的工作经验的面试题。他说在一面的时候被问到Mysql的面试题,索引那块自己都回答比较满意,但是问到Mysql的锁机制就比较懵了。因为平时没有关注Mysql的锁机制,当被问到高并发场景下锁机制是怎么保证数据的一致性的和事务隔离性的。他把他面试的过程分享给了我,Mysql高并发锁机制的问题,...转载 2020-07-11 13:55:01 · 282 阅读 · 2 评论 -
mysql explain 索引执行分析
转自:https://www.cnblogs.com/tufujie/p/9413852.html仅作个人备份,浏览请看原文在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及.转载 2020-06-17 19:01:17 · 212 阅读 · 0 评论 -
#### 聚集(聚簇)、非聚集(非聚簇)、二级索引,覆盖索引,及主键自增对聚簇索引的影响 ####
目录聚簇索引非聚簇索引二级索引以Mysql的InnoDB为例主键自增对聚簇索引的好处主键随机对聚簇索引的坏处首先,聚集和聚簇只是翻译不同而已,是一个东西,其实挺蠢的聚簇索引索引和数据存储在一块( 都存储在同一个B*tree 中)。 一般主键索引都是聚餐索引。Mysql中InnoDB引擎的主键索引为聚簇索引,MyISAM存储引擎采用非聚集索引。因为无法同时把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引(不过,覆盖索引可以模拟多个聚簇索引的情况)。.原创 2020-06-17 13:28:53 · 470 阅读 · 0 评论 -
mysql性能优化总结
作者:moonlightL链接:https://juejin.im/post/59d83f1651882545eb54fc7e来源:掘金仅作个人备份,浏览请看原文,原文更详尽~一、背景最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久。原因是新功能用到旧功能的接口,而这些旧接口的 SQL 查询语句关联5,6张表且编写不够规范,导致 MySQL 在执行 SQL 语句时索引失效,进行全表扫描。原本负责优化的同事有事请假回家,因此优化查询数据的问题落在笔者手中。笔者在查阅网上..转载 2020-06-14 19:39:41 · 196 阅读 · 0 评论 -
#### mysql 使用索引的注意事项 ####
如果我们创建了(a, b, c)的复合索引,那么其实相当于创建了(a,b,c)、(a,b)、(a)三个索引,这被称为最佳左前缀特性。以index(a,b,c)复合索引为例:语句 索引是否生效 where a = 1 是,字段 a 索引生效 where a = 1 and b = 2 是,字段 a 和 b 索引生效 where a = 1 and b = 2 and c = 3 是,全部生效 where b = 2 或 where c = 3 否 wh原创 2020-06-14 19:15:15 · 2628 阅读 · 1 评论 -
mysql高可用方案,MySql主从复制原理及配置,binLog和GTID
目录一、mysql高可用方案1. aliyun高可用mysql(内部集成:扩容/主从/集群/故障切换) + 分表2. 分库 + 自搭mysql主从 + 分表 + 手动或脚本主从切换3. 更多集群架构二、单讲binLog和GTIDbinLogGTID三、MySql主从复制原理及配置什么是主从复制?主从模式优点主从复制的原理主实例搭建从实例搭建将主从数据库进行连接主从复制测试一、mysql高可用方案1. aliyun高可用mysql..原创 2020-06-14 17:48:05 · 2733 阅读 · 0 评论 -
转:B树和B+树的插入、删除
转自:https://blog.csdn.net/qq_26222859/article/details/80631121?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonec转载 2020-06-10 21:24:38 · 200 阅读 · 0 评论 -
#### 自增主键(聚簇索引)、非主键索引(二级索引) 等等 ####
转自:https://mp.weixin.qq.com/s/RemJcqPIvLArmfWIhoaZ1g帅地帅地玩编程2019-02-15仅供个人备份,浏览请看原文目录1. 什么是最左前缀原则?(此为模糊查询的最左前缀,区分联合索引的最左前缀)2. 为什么用 B+ 树做索引而不用哈希表做索引?3. 主键索引和非主键索引有什么区别?以及’回表‘,以及其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。4. 为什么建议使用主键自增的索引?1. 什么是最左前缀...转载 2020-06-10 20:53:12 · 554 阅读 · 0 评论