数据库语句的执行

问题描述

我对数据库如何执行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

数据库语句的执行的相关文章

请问大神在数据库中可以执行的sql语句,为什么通过java类连接数据库执行报错

问题描述 请问大神在数据库中可以执行的sql语句,为什么通过java类连接数据库执行报错 报错信息: java.sql.SQLException: Already closed. 解决方案 这个错误提示并不是SQL语句的错误,而是Java的SQL操作类的连接对象已经关闭了,不能执行SQL而报出的异常. 解决方案二: 连接已经关了,当然出错了 解决方案三: 数据库为open,先open 在进行相应cmd命令执行. 解决方案四: 你的连接关闭了,jdbc去连接数据库啊 解决方案五: 这个问题还不是你

ORACLE数据库SQL语句的执行过程

SQL语句在 数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相 对应的服务端进程,之后由服务器进程执行该SQL语句,如果是SELECT语句,服务器进程还需要将执行结果回传给用户进程. SQL语句的执行过程一般如下: 解析(PARSE)-- 绑定(BIND)--执行(EXECUTE)--提取(FETCH 只有SELECT才需要这步) 解析   服务器进程接收到一个SQL语句时,首先要将其转换成执行这个S

java-为什么我在Java类中执行SQL语句,程序没错,而数据库却没执行??

问题描述 为什么我在Java类中执行SQL语句,程序没错,而数据库却没执行?? 解决方案 不知道画了删除线是什么意思,你确认这些代码有效么 解决方案二: 你用的什么啊?Hibernate?还是别的框架啊?Hibernate的话,可能是事务没有提交,你执行flush方法就可以了 解决方案三: 代码可以贴全一点吗?看不到关键部分 解决方案四: 代码内容太少了,你的Sqlca是个什么,最起码给个声明. 解决方案五: 你的sqlca是什么啊? 解决方案六: executeSQL方法问题 这个方法只能是查

[急等解答!!]c#连接sql数据库后,执行完语句无法显示在datagridview里

问题描述 各位前辈!!!我是一个c#新手,最近自学的过程中发现点问题c#连接sql数据库后,执行完语句无法显示在datagridview里....我做的是一个仓库系统,界面载入以后有以下几个控件:产品名称:combo_name下拉(已经绑定到产品信息表中了)操作数量:textbox1可输入操作数量出入库选择:combo_inout下拉(包含in和out2个选项)产品编号:textbox2只可显示combo_name下拉里产品在数据库里的编号(已经与库里产品信息表绑定,在combo_name改变时

通过分析SQL语句的执行计划优化SQL(二)

优化|语句|执行 第5章 ORACLE的执行计划 背景知识:        为了更好的进行下面的内容我们必须了解一些概念性的术语: 共享sql语句    为了不重复解析相同的SQL语句(因为解析操作比较费资源,会导致性能下降),在第一次解析之后,ORACLE将SQL语句及解析后得到的执行计划存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享.因此,当你执行一个SQL语句(有时被称为一个

使用参数化和块语句来提高批处理SQL语句的执行效率

如果你的项目要求你的程序对高达几万条的数据在集中的时间内执行固定序列的操作,且不能完全使用存储过程时而需要使用程序来执行时.会需要这些优化. 我们知道,SQL服务器对一条语句的执行,需要分析.编译.执行这些步骤,通过参数化我们可以对一种命令只分析和编译一次,而执行多次,从而提高效率.在执行时,如果每次提交语句,可以完成多条SQL语句,则可以减少通讯时间,也可以提高效率. 通过 System.Data.IDbCommand.Prepare() 方法,我们可以在第一次执行语句时,分析和编译SQL语句

服务器-web项目在执行大量的插入语句时执行一段时间后卡死

问题描述 web项目在执行大量的插入语句时执行一段时间后卡死 SSH框架,在页面有一个poi 批量导入excel的功能,每读取excel一行,保存为一个实体然后循环insert到DB里.刚开始程序运行正常,但是一段时间过后,系统出现卡死,不再执行insert sql ,刷新页面也没有响应,只能重启服务器.期间程序没有报错,myeclipse也不是内存溢出导致的卡死,因为点击其他功能模块时不会出现上述所说的问题,只有在执行大量的insert sql 时才会. 因为代码没有报错我也就不贴代码了. 我

Oracle数据库语句大全

ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约束中指定的条件是否得到了满足. UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束. POREIGN KEY (外部键)--通过使用公共列在

mysql-insert into语句可执行不报错就是添不进去。请大神帮忙解答

问题描述 insert into语句可执行不报错就是添不进去.请大神帮忙解答 MYSQL m_sqlCon; mysql_init(&m_sqlCon); if(!mysql_real_connect(&m_sqlCon,"localhost","root","0412qwer","xscj",3306,NULL,0)) {AfxMessageBox(_T("数据库连接失败"));} els