编辑
2023-10-27
数据库理论基础
00

Process Module

值得注意的是,使用额外的 processes/threads 来并行地执行查询可以通过提高 CPU 利用率来提高 DBMS 效率;但如果 DBMS 效率瓶颈出现在 disk 数据存取上,这种优化带来的效果就非常有限,甚至有可能因为 disk I/O 的提高导致整体性能下降,如 cache miss rate 提高等等

编辑
2023-10-27
数据库理论基础
00

启发式/规则

启发式优化将查询的部分与已知的模式进行匹配,以重组计划。这些规则对查询进行转换,消除低效率的部分,这种方式不需要检查数据本身

编辑
2023-10-27
英语学习
00

Why do some people major in mathematics instead of computer science to work as a programmer?

“Why do some people major in mathematics instead of computer science to work as a programmer?”

编辑
2023-10-27
数据库理论基础
00

Nested Loop Join

Simple

r为驱动表,s为匹配表,可以看到从r中分别取出r1、r2、......、rn去匹配s表的左右列,然后再合并数据,对s表进行了rn次访问,对数据库开销大

在没有索引的情况下,会进行n次的全表扫描

Block

如果有索引,会选取第二种方式进行join,但如果join列没有索引,就会采用Block Nested-Loop Join。可以看到中间有个join buffer缓冲区,是将驱动表的所有join相关的列都先缓存到join buffer中,然后批量与匹配表进行匹配,将第一种多次比较合并为一次,降低了非驱动表(s)的访问频率。默认情况下join_buffer_size=256K,在查找的时候MySQL会将所有的需要的列缓存到join buffer当中,包括select的列,而不是仅仅只缓存关联列。在一个有N个JOIN关联的SQL当中会在执行时候分配N-1个join buffer。

编辑
2023-10-27
算法题
00

外部排序一般应用于对大文件数据进行排序,文件太大加载不进内存或者很困难。可以利用归并排序分成小文件有序在合并成大文件。在数据库系统中很常见(filesort)

我们先写个简单的程序生成0-10000000的数字,生成1000000个,在一个大文件。

py
import random with open('numbers.txt', 'w') as file: for _ in range(1000000): num = random.randint(0, 10000000) file.write(str(num) + '\n')