首先看一下索引,索引在内存吗?
在磁盘上,b+tree, 每个节点是一个page;实际上不可能放在内存中,因为聚簇索引所有叶子节点是数据,这些数据太多了,内存放不下。
那难道Mysql不使用内存来加快查询速度?常听到的数据库缓存是什么意思?
缓存这个词很有歧义。这种缓存说的是应用程序的缓存还是文件系统缓存(filesystem cache)呢?读取磁盘上的文件都会有filesystem cache,这是操作系统本身提供的,是一个底层的,和程序无关的机制。Mysql应该也有自己的优化机制。这个机制是什么呢?
如果你使用innoDB引擎的话,应该听说过buffer pool 。看一下 MySQL :: MySQL 5.7 Reference Manual 对这个词的解释。
The buffer pool is an area in main memory where
InnoDB
caches table and index data as it is accessed. The buffer pool permits frequently used data to be accessed directly from memory, which speeds up processing. On dedicated servers, up to 80% of physical memory is often assigned to the buffer pool.For