问题描述
我对数据库如何执行sql语句有些不理解,希望大侠们可以帮助我。sql执行的时候,它用到的数据放入内存吗?如果在执行开始就需要把用到的数据放入内存,那么可能一开始的数据很大啊。比如select ** from ** where **,一开始执行from,会把表的数据放入内存吗,表的数据量非常大内存装不下呢?如果不装入内存,直接操作磁盘,那么where语句后面的条件是怎么判断的呢?mysql的limit是在满足条件的结果中限制真正的结果数量,那么满足条件的结果是在内存中还是在磁盘里?在磁盘里它是如何进行限制的呢?
解决方案
比如你select name from user where id > 100; 比如有1000条数据 最大id为1000个么它就先读索引到内存,然后把符合条件的行在磁盘中(数据库数据文件)的位置找到,从磁盘中把对应行所在的那一块数据块读到内存块里,取出来结果放到结果集里,然后继续取下一块内容,如果内存满了 之前的内存块就被替换掉了。。。。如果内存够大,结果集是在内存里的,不够大的话,会把结果集放到临时表里,也就是磁盘上可以搜一下 数据库原理 之类的内容看一下
解决方案二:
你可以看一下这个博客,对sql执行原理的介绍http://bestxiaok.iteye.com/blog/1117101
解决方案三:
是按照数据块一块一块读到内存里操作的,而不是一次性把全部数据都读进来的,不可能直接在磁盘上操作的,全部都是要读到内存里再操作。。
时间: 2024-08-19 09:37:36