
数据库设计与优化
文章平均质量分 92
南宫理的日知录
左手人文,双手科技
展开
-
结合数据索引结构看SQL的真实执行过程
2、加入最终返回的字段比较多,执行引擎在执行的过程中,可能决定不将所有字段都放入sort_buffer,可能只放主键id和参与排序的字段,然后排序完成之后,需要再按序进行一次回表的操作,获取用户需要的所有字段,然后再返回给用户。这种查询场景,叫做”回表“。回表的操作,会增加磁盘IO的次数,如果辅助索引结构中已经包含了用户需要的所有字段,则可以避免回表的操作,这时候的索引叫做”覆盖索引“。实际上SQL的执行要考虑的真实场景比较复杂,本文为了便于描述与理解,做了相应的简化,感兴趣的可以自行研究。原创 2024-07-01 08:26:20 · 1602 阅读 · 0 评论 -
数学之美:SQL语句的编译与关系代数
关系型数据背后的关系代数及SQL语句的编译及优化原创 2024-06-29 07:18:42 · 1124 阅读 · 0 评论 -
可行与高效你选哪个:SQL背后的核心算法
经过前面几篇数据库的数据库设计与优化的铺垫之后,一直想着开始进行真正的SQL的优化分析,但是细想下来,还有些工作没有做:其一,数据库管理系统的基本构成全貌,目前仍然缺失的,一直在细节内打转,难免陷入管窥蠡测的困境;其二,对动态的SQL执行大体情况,也是需要进行相应的补充。之后,才能更好地把握数据库的优化。原创 2024-06-21 14:46:27 · 1387 阅读 · 0 评论 -
位图索引、倒排索引及布隆过滤
介绍了几种索引的结构及使用,我们需要始终回归到数据库设计与优化的基本原则:尽量减少磁盘的IO操作,不管是聚簇索引、辅助索引,还是位图索引、倒排索引,或者是布隆过滤器的使用,其实都在是落实这项基本原则。原创 2024-06-19 11:34:12 · 1079 阅读 · 0 评论 -
数据库索引、河神、樵夫与《新华字典》
实际检索中,如果从辅助索引检索,则在不是覆盖索引(懂的都懂,以后再说)的情况下,定位到主键的键值后,还要到聚簇索引中找到真正数据页,这一步叫做回表。如果索引/键不能唯一标识出目标数据,符合条件的可能有多条,怎么确保符合条件的都被找到呢,所以数据必须以有序的方式进行存储,从第一个符合条件的开始,直到找到第一个不符合条件的,就可以停止查找了。数据库有序真正的困境在于,从数据库表创建之时起,数据的每一次增删改,都要保证数据库的有序,索引的个数越多,增删改维持数据有序的成本越大……选择了一种,就要放弃其他的可能。原创 2024-06-16 11:13:33 · 1086 阅读 · 0 评论 -
关于Cache与延迟的思考
Cache技术的应用带来的新问题,一方面是数据一致性的问题,缓存数据与数据源的不一致,必然带来数据同步的问题,在一些场景下,我们甚至放弃了强一致性,弱一致性、最终一致性似乎也变得可以接受;而关于最优解的探求,我们的目标一定是全局最优解,但是很多情况下,并不现实,同样是各种可见、不可见的约束的共同作用下,最终我们得到的只能是可接受的局部最优解。主存有瓶颈,理所当然的就会想到引入更快的存储介质,比如SRAM,所以,最早的Cache是以硬件的形式被引入到分级存储体系中,用于尽量弥合CPU与主存之间速度的差异。原创 2024-06-15 11:47:14 · 877 阅读 · 0 评论 -
从冯诺依曼体系看数据库设计与优化
2、内存属于易失性存储介质,数据需要持久化存储到辅助存储器/外部存储器中,典型的是磁盘,从磁盘读写数据的时间延迟一般是毫秒(ms)级,跟内存读取速度,存在10^6(百万级)的差距,延迟的大头在于寻道时间+旋转延迟,批量顺序磁盘IO操作,可以更加充分地发挥磁盘性能,使得磁盘的延迟无限趋近于传输时间;可以粗略的认为,发生在计算机中的每一件事情,不论是指令的执行还是数据的处理,都是作用于驻留在内存的信息上的(尽管实际上通常会将所使用的数据转移到高速缓存中)。例如,循环结构中的变量在每次循环迭代时都会被重复访问。原创 2024-06-14 14:33:53 · 1078 阅读 · 0 评论