以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 外部数据源SQL查询的速度问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=41995) |
-- 作者:sh16 -- 发布时间:2013/11/1 10:10:00 -- 外部数据源SQL查询的速度问题 代码如下,有问题吗?数据源里有6张表,现在有8500行,每一行不知道在具体哪张表上,要分别去每张表查。查询8500行用了半个小时。。。。。。。。这个速度太慢了吧。 Dim cmd As New SQLCommand
[此贴子已经被作者于2013-11-1 10:10:25编辑过]
|
-- 作者:Bin -- 发布时间:2013/11/1 10:17:00 -- 检查你网络速度以及你服务器响应速度. 另外如果你查询的数据有大量数据,速度肯定也不会快. |
-- 作者:sh16 -- 发布时间:2013/11/1 10:20:00 -- 同一个局域网,很快啊。我想问下,一条记录在数据源多张表查,象我这么写代码有问题吗。谢谢 |
-- 作者:狐狸爸爸 -- 发布时间:2013/11/1 10:23:00 -- 思路决定一切,你这种思路,就是在本机,也要很长的时间,你要知道,你执行了8500次select语句,生成了8500次临时表。
1、性质类似的数据合并在一起,不要分开6个表,用后用组合查询生成一个查询表,完成这样的任务是就是几秒钟而已。 2、如果已经是事实,你可以将这个6个表全部载入到一个表中,成为一个DataTable,在这个DataTable检索,合并多个表的select语句参考:
五、UNION 运算符 UNION运算符用于组合两个查询的结果。 SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = \'中国\' UNION SELECT 公司名称, 地址 FROM {供应商} WHERE 国家 = \'中国\' 两个查询的字段名称、个数、类型必须完全一致才行。 默认情况下,UNION会自动排除重复的行,然后你可以用ALL关键词来确保返回所有的行,例如: SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = \'中国\' UNION ALL SELECT 公司名称, 地址 FROM {供应商} WHERE 国家 = \'中国\' [此贴子已经被作者于2013-11-1 10:24:18编辑过]
|
-- 作者:Bin -- 发布时间:2013/11/1 10:25:00 -- For Each dtn As String In Connections("泉州").GetTableNames 楼主这里似乎只循环了6个表6次而已.并没有8500次吧. |
-- 作者:狐狸爸爸 -- 发布时间:2013/11/1 10:28:00 -- 呵呵,他一行数据要执行6次,合计8500行,其实我前面报少了,重置列的话,执行了8500 * 6 = 51000,执行51000次select语句,生成51000个临时表,半小时其实算很快了。 |
-- 作者:狐狸爸爸 -- 发布时间:2013/11/1 10:31:00 -- 嘿嘿,如果再加上获取表名的8500次,应该是执行了59500次查询了,生成59500个临时表了 |
-- 作者:Bin -- 发布时间:2013/11/1 10:31:00 -- 不会是循环8500行来这样查吧,不半小时才怪呢.晕死! 楼主这个思路严重的有问题啊,你把你需求说出来看看,换个思路做吧!
|
-- 作者:sh16 -- 发布时间:2013/11/1 10:35:00 -- 我是有8500行记录,要在外部数据源的6张表里查,而且表的数量随着需要可能还会增加,我是想编好代码后不用每次增加表都去改代码。分开多张表的目的是为了好管理。请问下有没有好的办法?谢谢。 [此贴子已经被作者于2013-11-1 10:35:31编辑过]
|
-- 作者:Bin -- 发布时间:2013/11/1 10:37:00 -- 你好,请把你的需求说出来,这样才可以为你提供更好的办法哦. |