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


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

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

帅哥哟,离线,有人找我吗?
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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个临时表,半小时其实算很快了。

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


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

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


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/1 10:39:00 [显示全部帖子]

强烈建议你在一个表中,然后用查询表处理这种问题。

实际上,就管理而言,性质相同的数据,一个表才好管理。


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/11/1 10:44:00 [显示全部帖子]

以下是引用sh16在2013-11-1 10:41:00的发言:
就是我上面说的,有很多号码,需要在多张表(多个机房)中查询记录,不知道具体分布在哪张表中,需要在每张表中查询。每张表都不大,顶多几千条记录。分开几张表的目的是为了好管理,好区分。

 

数据不大的话,很好办,设计一个查询表,将这6个表的数据全部查询到一个DataTable中,然后修改你的代码,直接在DataTable中查询数据,而不是用select语句查询,这样一来,只需执行一次select语句,就是生成查询表的时候执行了一次,估计重置8500行,也就是10秒左右的时间而已。

 

就是我4楼回复的第二种方法:

 

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:45:08编辑过]

 回到顶部