我试图了解查找在数据库中是如何工作的。在数据库中,一切都在文件系统的磁盘上。所以让我们说如果我使用一些过滤器子句查询具有数百万条记录的表中的数据,那么所有记录将首先加载到内存中,然后查找特定数据或发生其他事情?正确的 ?我的理解是,无论我们运行什么查询,所有数据库表的数据都会加载到内存中,然后执行操作。这是正确的吗 ?其次,如果我在表中有 8gb 的数据和 4gb ram,那可以从数据库中获取数据吗?通常它可以工作,但它是否在磁盘上搜索?真的吗 ?请分享您的看法。
2 回答
holdtom
TA贡献1805条经验 获得超10个赞
如果您正在谈论使用 SQL 的关系数据库,那么您的假设是错误的。
数据库不会一次将所有行加载到内存中以仅查找一行。如果 where 子句中的列有索引,则该索引将用于查找所需的行。
如果没有索引,数据库可能会从表中一行一行地读取,检查值并丢弃那些不符合 WHERE 子句过滤条件的值。因此,在任何给定时间,只有一小部分行保存在内存中(多少取决于数据库的实现、配置和选择的执行计划)。
如果行不适合内存,数据库可能会在磁盘上执行操作。例如,如果需要某种行,那么如果没有足够的内存来将所有行保存在内存中,那么这可能会在磁盘上完成。
当结果返回时,它也不保存在内存中。具体如何完成取决于特定的 DBMS 产品。
添加回答
举报
0/150
提交
取消