请教一个查询优化问题

笨狗熊 2013-03-20 11:36:46
我使用MS-SQL 2008 建了如下两表:

if exists (select 1
from sysobjects
where id = object_id('T_CANVERSION')
and type = 'U')
drop table T_CANVERSION
go

/*==============================================================*/
/* Table: T_CANVERSION */
/*==============================================================*/
create table T_CANVERSION (
versionID int identity
constraint CKC_VERSIONID_T_CANVER check (versionID >= 1),
versionName varchar(30) not null,
groupID char(9) not null,
carType int not null,
constraint PK_T_CANVERSION primary key (versionID)
)
go

if exists (select 1
from sysobjects
where id = object_id('T_CANDATA')
and type = 'U')
drop table T_CANDATA
go

/*==============================================================*/
/* Table: T_CANDATA */
/*==============================================================*/
create table T_CANDATA (
intID int identity
constraint CKC_INTID_T_CANDAT check (intID >= 0),
strCtrlorName varchar(50) not null,
strCanID varchar(20) not null,
intOperate int not null,
intStByte int not null,
intLenByte int not null,
intStBit int not null,
intLenBit int not null,
flPer varchar(12) not null,
intOffset int not null,
intSetEn int not null,
intGroup int not null,
intCtrlType int not null,
inTime varchar(20) not null,
versionID int not null,
constraint PK_T_CANDATA primary key (intID)
)
go

alter table T_CANDATA
add constraint FK_T_CANDAT_REFERENCE_T_CANVER foreign key (versionID)
references T_CANVERSION (versionID)
go

建完表后在T_CANVERSION插入几条数据,在T_CANDATA插入几百条数据。
然后运行如下查询语句:
select intID, strCtrlorName, strCanID, intOperate, intStByte, intLenByte, intStBit, intLenBit, flPer, intOffset, intSetEn, intGroup, inTime, intCtrlType, versionID from T_CANDATA

就总是在查出部分数据后报如下错误:
消息 64,级别 20,状态 0,第 0 行
在从服务器接收结果时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 指定的网络名不再可用。)

特别说明:
1、数据库是在外网的服务器上,通过远程连接进行数据查询。
2、我在家远程连接查询很快就把数据查出来了,在公司远程查询就报上面描述的错误。我想过可能是网络限制问题,但是这个表才只有几百条数据,公司上网路由器限制每秒最大流量有180K/S,这么点数据不应该查不出来啊,不知道为什么。
3、如果不考虑网络问题,我这个表设计和查询上是不是有什么可以优化的地方,求指教。
...全文
282 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨狗熊 2013-03-20
  • 打赏
  • 举报
回复
会不会是我的表设计上有不合理的地方,影响查询性能。但是我在家的电脑上查有能很快查出来,想不明白。。。
笨狗熊 2013-03-20
  • 打赏
  • 举报
回复
我这样子查一两个字段又可以很快查出结果: select intID, flPer--, strCtrlorName, strCanID, intOperate, -- intStByte, intLenByte, intStBit, intLenBit, -- flPer, intOffset, intSetEn, intGroup, inTime, intCtrlType, versionID from T_CANDATA
笨狗熊 2013-03-20
  • 打赏
  • 举报
回复
执行1楼语句的结果:

这能说明什么问题吗?

外网数据库是挂在万网云服务器上的,公司上网走的路由是有带宽限制的,但是没有特定的IP访问限制,我这个外网数据库还有别的很多表,我查别的表很快就有结果了,几万条数据的表都能全部查出来。
昵称被占用了 2013-03-20
  • 打赏
  • 举报
回复
单表无条件查询,没的优化 公司是否有防火墙限制?
發糞塗牆 2013-03-20
  • 打赏
  • 举报
回复
SELECT * FROM sys.configurations WHERE name='network packet size (B)' 看看结果
笨狗熊 2013-03-20
  • 打赏
  • 举报
回复
谢谢版主和各位的帮忙啦
笨狗熊 2013-03-20
  • 打赏
  • 举报
回复
發糞塗牆 2013-03-20
  • 打赏
  • 举报
回复
引用 14 楼 liujinye 的回复:
在公司远程连接查询,有的时候可以完全查询出结果,有的时候就报那个错。而在我家里上网查询,从来没出过这样的错误。说强制IP隔离也说不通呀。感觉还是我公司网络限制的问题。。。
找网管去,或者你用他的电脑来连连
笨狗熊 2013-03-20
  • 打赏
  • 举报
回复
在公司远程连接查询,有的时候可以完全查询出结果,有的时候就报那个错。而在我家里上网查询,从来没出过这样的错误。说强制IP隔离也说不通呀。感觉还是我公司网络限制的问题。。。
guguda2008 2013-03-20
  • 打赏
  • 举报
回复
云数据库?联系他们管理员让协助查询,在服务器端监控连接与断开的情况。这个报错是在查询时被强制IP隔离会出现的。
發糞塗牆 2013-03-20
  • 打赏
  • 举报
回复
那我只能说可能是网络带宽限制了数据大小.......,问下你们管网络的人,你的机子带宽有多少
笨狗熊 2013-03-20
  • 打赏
  • 举报
回复
我的配置和你这个一样的,都是默认的我从来没动过。
發糞塗牆 2013-03-20
  • 打赏
  • 举报
回复
看看你这里的配置或者服务器上这里的配置
笨狗熊 2013-03-20
  • 打赏
  • 举报
回复
很可能是网络限制问题了,我刚才试过,可以完全查询出来了。
笨狗熊 2013-03-20
  • 打赏
  • 举报
回复
我把整个表数据导成txt后,文件才18.9K。。。
笨狗熊 2013-03-20
  • 打赏
  • 举报
回复
我盯着360流量监控看,也没见即时流量有多大呀。现在上班数据下载不下来,晚点我再试试把文件保存为txt看看。不过应该不会很大,总共才200多条记录。
發糞塗牆 2013-03-20
  • 打赏
  • 举报
回复
根据你的描述,可能是返回的结果过大,导致达到了带宽上线,堵死了。然后就中断连接。你有试过把数据另存为txt,有多大吗?

34,571

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧