数据库高级查询查询求解

Hibernate数据库查询问题,求解?
[问题点数:20分]
本版专家分:0
结帖率 28.57%
CSDN今日推荐
本版专家分:0
本版专家分:0
本版专家分:0
匿名用户不能发表回复!
其他相关推荐首先,介绍三种联接方式,合并联接(Merge join),哈希联接(Hash Join)和嵌套循环联接(Nested Loop Join)。
合并联接:把问题拆分为小问题,通过解决小问题来解决最初的问题,分为两步:
拆分阶段,将序列分为更小的序列
排序阶段,把小的序列合在一起(使用合并算法)来构成更大的序列
嵌套循环联接(迭代,复杂度高)
针对外关系的每一行
查看内关系里的所有行来寻找匹配的行
哈希联接:
1) 读取内关系的所有元素
2) 在内存里建一个哈希表
3) 逐条读取外关系的所有元素
4) (用哈希表的哈希函数)计算每个元素的哈希值,来查找内关系里相关的哈希桶内
5) 是否与外关系的元素匹配。
然而,解决实际问题的过程中,会需要对查询不断的优化。
动态编程:将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。(大量数据查询时,需要附加额外的规则(或者称为启发式算法)来减少可能性)
贪婪算法:按照一个规则(或启发)以渐进的方式制定查询计划。在这个规则下,贪婪算法逐步寻找最佳算法,先处理一条JOIN,接着每一步按照同样规则加一条新的JOIN。(不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。)
例如:比如一个针对5张表(A,B,C,D,E)4次JOIN 的查询,为了简化我们把嵌套JOIN作为可能的联接方式,按照『使用最低成本的联接』规则。
直接从 5 个表里选一个开始(比如 A)
计算每一个与 A 的联接(A 作为内关系或外关系)
发现 “A JOIN B” 成本最低
计算每一个与 “A JOINB” 的结果联接的成本(“A JOIN B” 作为内关系或外关系)
发现 “(A JOIN B)JOIN C” 成本最低
计算每一个与 “(AJOIN B) JOIN C” 的结果联接的成本 ……
最后确定执行计划 “( ((A JOIN B) JOIN C) JOIN D ) JOIN E )”
因为我们是武断地从表 A 开始,我们可以把同样的算法用在 B,然后 C,然后 D, 然后 E。最后保留成本最低的执行计划。
也可以叫【最近邻居算法】,属于启发式算法中一员。
启发式算法:算法根据特定规则,一步步的应用规则但不总是保留上一步找到的最佳方法。它们统称启发式算法。
例如PostGreSQL中用的基因算法:
一个方法代表一种可能的完整查询计划
每一步保留了 P 个方法(即计划),而不是一个。
0) P 个计划随机创建
1) 成本最低的计划才会保留
2) 这些最佳计划混合在一起产生 P 个新的计划
3) 一些新的计划被随机改写
4) 1,2,3步重复 T 次
5) 然后在最后一次循环,从 P 个计划里得到最佳计划。
例如SQLite中用的最近邻居算法
以上是我在看数据库原理(http://blog.jobbole.com/100349/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io)做的关于数据库查询优化方面的简单笔记,如果有兴趣研究数据库原理的,可以看下这篇文章,文章很长,但很有料。
原先数据库没有好好学习,感觉一直是似懂非懂的状态,很多原理也不懂,今天抽时间查阅一些资料自己也总结了一些。
本文数据库索引原理部分主要参考博文:http://www.cnblogs.com/aspw...
例3.2最长回文子串书中讲的很好,主要难点在三处
1. 输入字符串要含有空格,对应java下的readLine()方法即可
2. 查找回文串,暴力搜索,书中从中间搜索,没感觉复杂度降低多少
数据库查询笔记
没有更多推荐了,数据库批量查询求解
[问题点数:100分,结帖人xjg103]
本版专家分:20
结帖率 75%
CSDN今日推荐
本版专家分:132263
2013年 荣获名人称号
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2012年11月 总版技术专家分月排行榜第一
本版专家分:20
本版专家分:132263
2013年 荣获名人称号
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2012年11月 总版技术专家分月排行榜第一
本版专家分:1115
本版专家分:36944
2009年1月 Delphi大版内专家分月排行榜第一
2009年4月 Delphi大版内专家分月排行榜第二2009年3月 Delphi大版内专家分月排行榜第二2009年2月 Delphi大版内专家分月排行榜第二2008年12月 Delphi大版内专家分月排行榜第二
本版专家分:10481
本版专家分:20
本版专家分:132263
2013年 荣获名人称号
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2012年11月 总版技术专家分月排行榜第一
本版专家分:20
本版专家分:132263
2013年 荣获名人称号
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2012年11月 总版技术专家分月排行榜第一
本版专家分:20
本版专家分:132263
2013年 荣获名人称号
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2012年11月 总版技术专家分月排行榜第一
本版专家分:665
本版专家分:20
本版专家分:20
匿名用户不能发表回复!
其他相关推荐C#语言(VS2013)数据库操作显示字段下所有文本内容到编辑框不会,求解,以下是查询mdb表里所有字段的代码
原问题:C#语言(VS2013)数据库操作显示字段下所有文本内容到编辑框不会,求解,以下是查询mdb表里所有字段的代码
最后更新时间:【 15:06:34】
问题补充:using System.Data.OleDb;OleDbConnection CCCC = new OleDbConnection(&provider=Microsoft.Jet.OLEDB.4.0;data source=& + @&E:\数据库\db1.mdb&); //创建连接对象CCCC.Open();//打开连接OleDbCommand EEEE = new OleDbCommand(&select * from & + &iipp&, CCCC);//建立SQL查询语句表名OleDbDataReader BBBB = EEEE.ExecuteReader();//建立读取int DDDD = BBBB.FieldC //查询并显示字段数量for (int i = 0; i & DDDD; i++){shuchu.Text += BBBB.GetName(i) + &\r\n&;//显示所有字段数据到编辑框}CCCC.Close();//关闭连接
例如,数据库中user_tables表储存用户所有的表,如果想把这些表名集合加载到listbox中,以下代码可以实现:7privatevoidGetTableName(){OracleConnectionconn=newOracleConnection(&datasource=UserId=Password=&);//创建连接串conn.Open();stringsql=&selecttable_namefromuser_tables&;OracleCommandcmd=newOracleCommand(sql,conn);OracleDataAdapterodr=newOracleDataAdapter(cmd);DataTabledt=newDataTable();odr.Fill(dt);for(inti=0;i&dt.Rows.Ci++){stringitem=dt.Rows[i][0].ToString();//获取数据库中第i行第一列的值listbox.Items.Add(item);//添加到listbox中}conn.Close();}
最佳答案由网友&&mpdmxm&&提供
公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
暂无其它回答!数据库查询求解_百度知道
数据库查询求解
我有一张表,我想查询数据,每次查询一条数据,但是已经查询过的数据不要再次被查到,怎么破...
我有一张表,我想查询数据,每次查询一条数据,但是已经查询过的数据不要再次被查到,怎么破
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自电脑网络类芝麻团
采纳数:90
获赞数:115
参与团队:
要么加个标识字段,这条取过之后给标识一下要么取过一条数据把这条数据的创建时间记下来,下次查询,按时间比这个大的查,需要对数据按创建时间进行排序
为你推荐:
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 数据库范式例题详解 的文章

 

随机推荐