Foxtable(狐表)用户栏目专家坐堂 → 外部数据源SQL查询的速度问题


  共有7037人关注过本帖树形打印复制链接

主题:外部数据源SQL查询的速度问题

帅哥哟,离线,有人找我吗?
sh16
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:98 积分:1749 威望:0 精华:0 注册:2013/5/6 0:54:00
外部数据源SQL查询的速度问题  发帖心情 Post By:2013/11/1 10:10:00 [只看该作者]

 代码如下,有问题吗?数据源里有6张表,现在有8500行,每一行不知道在具体哪张表上,要分别去每张表查。查询8500行用了半个小时。。。。。。。。这个速度太慢了吧。         

            Dim cmd As New SQLCommand
            Dim dt As DataTable
            cmd.C
            For Each dtn As String In Connections("泉州").GetTableNames
                cmd.CommandText = "SELECT * From {" & dtn & "} where [PVLAN] = " & e.DataRow("板/PVLAN") & " And [CVLAN] = " & e.DataRow("端口/CVLAN")
                dt = cmd.ExecuteReader
                If dt.DataRows.Count > 0 Then
                    e.DataRow("LOID") = dt.DataRows(0)("LOID")
                    e.DataRow("PON口") = dt.DataRows(0)("PON口")
                    e.DataRow("ONUID") = dt.DataRows(0)("ONUID")
                    exit for
                Else
                    e.DataRow("LOID") = Nothing
                    e.DataRow("PON口") = Nothing
                    e.DataRow("ONUID") = Nothing
                End If
            Next

 

[此贴子已经被作者于2013-11-1 10:10:25编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/1 10:17:00 [只看该作者]

检查你网络速度以及你服务器响应速度.

另外如果你查询的数据有大量数据,速度肯定也不会快.



 回到顶部
帅哥哟,离线,有人找我吗?
sh16
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:98 积分:1749 威望:0 精华:0 注册:2013/5/6 0:54:00
  发帖心情 Post By:2013/11/1 10:20:00 [只看该作者]

同一个局域网,很快啊。我想问下,一条记录在数据源多张表查,象我这么写代码有问题吗。谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/1 10:25:00 [只看该作者]

For Each dtn As String In Connections("泉州").GetTableNames    楼主这里似乎只循环了6个表6次而已.并没有8500次吧.

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/1 10:28:00 [只看该作者]

呵呵,他一行数据要执行6次,合计8500行,其实我前面报少了,重置列的话,执行了8500 * 6 = 51000,执行51000次select语句,生成51000个临时表,半小时其实算很快了。

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/1 10:31:00 [只看该作者]

嘿嘿,如果再加上获取表名的8500次,应该是执行了59500次查询了,生成59500个临时表了


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/1 10:31:00 [只看该作者]

图片点击可在新窗口打开查看不会是循环8500行来这样查吧,不半小时才怪呢.晕死! 

楼主这个思路严重的有问题啊,你把你需求说出来看看,换个思路做吧!

 回到顶部
帅哥哟,离线,有人找我吗?
sh16
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:98 积分:1749 威望:0 精华:0 注册:2013/5/6 0:54:00
  发帖心情 Post By:2013/11/1 10:35:00 [只看该作者]

我是有8500行记录,要在外部数据源的6张表里查,而且表的数量随着需要可能还会增加,我是想编好代码后不用每次增加表都去改代码。分开多张表的目的是为了好管理。请问下有没有好的办法?谢谢。

[此贴子已经被作者于2013-11-1 10:35:31编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/11/1 10:37:00 [只看该作者]

你好,请把你的需求说出来,这样才可以为你提供更好的办法哦.

 回到顶部
总数 22 1 2 3 下一页