为什么同一条sql语句,在navicat中比在程序中执行要快100倍以上?

wz07600 2012-09-03 03:45:07
sql语句:select 1 from towerload_info where FilesNames=''FC001MY1500KW19-20120801021848TJ'' and LoadSign=1
在navicat中执行时返回结果只需要100多ms,但在自己编写的程序中需要6s(ado),请各位帮忙看看是什么原因?
...全文
3425 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa20000 2012-10-21
  • 打赏
  • 举报
回复
100倍啊,有这么远的差价?我有点怀疑。
shengqx 2012-10-20
  • 打赏
  • 举报
回复
不过我想可能是这个原因:navicat一直是打开数据库的,而程序中需要先打开数据库,然后执行完毕再断开数据库。不过hibernate用的是连接池,也不应该差这么多啊
shengqx 2012-10-20
  • 打赏
  • 举报
回复
我也发现了这个问题,同样的语句,navicat vs java hibernate,相差是有100倍,不知是什么原因
haitao 2012-10-15
  • 打赏
  • 举报
回复
navicat?没听过。。。。

这个sql返回多少条记录?虽然字段就是1.。。。
爱之沙漏 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
navicat只有读取部分数据,显示出来
[/Quote]
对了 提醒我了 navicat默认是显示前1000条记录
想到才能做到 2012-10-14
  • 打赏
  • 举报
回复
如果我没有猜错的话楼主在程序里使用的是循环的方式,改用SQL语句进接打开看。
cqs6616 2012-09-08
  • 打赏
  • 举报
回复
navicat只有读取部分数据,显示出来
仙侣步惊云 2012-09-04
  • 打赏
  • 举报
回复
在数据库系统的ide环境和在使用ODBC的程序中,有一些速度的差异,但一般不会达到一个数量级,慢40%左右
ffwin 2012-09-04
  • 打赏
  • 举报
回复
感觉是 数据从硬件读取的时间差别吧,不是指令时间
lhy 2012-09-04
  • 打赏
  • 举报
回复
是在同一台机器上吗?
专制的网站 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
只有50几万条数据,应该不是语句的原因,非常想不通的问题是在navicat中运行为什么是正常的,唯一的不同是自己写的程序通过mysql的odbc驱动而已。
[/Quote]
具体原因待查...不瞎说,只说下我自己曾经遇到过的事情。
之前没用过MyODBC,就找了下了个用了有问题,然后重下了个 mysql-connector-odbc-5.1.5-win32.msi 用就好了。lz不妨试试看吧...
蓝色光芒 2012-09-04
  • 打赏
  • 举报
回复
楼主试一下 select Count(*) from towerload_info where LoadSign=1 and FilesNames='FC001MY1500KW19-20120801021848TJ'
这句语句的时间,如果非常短,试一下把你的AdoQuery.CursorLocation设置成clUseServer试一下查询记录的速度,不确定能解决你的问题.
个人分析:
50万条记录查询并全部复制到本地100ms完成有点悬,所以怀疑它用的分页或者就是这样,或者其他因为你select 1,固定数字,只要一个满足条件的记录数就够了,所以navicat有可能优化,不确定这一点。
robotdeng 2012-09-04
  • 打赏
  • 举报
回复
ODBC本身就比较慢, 为什么不用ADO呢?

肯定差不了这么多...
goto1997 2012-09-04
  • 打赏
  • 举报
回复
用odbc连接本身就会慢一点,
另外navicat软件应该对mysql的连接和查询有优化;

个人感觉应该是用odbc的原因多一点;
竹鹿风清 2012-09-04
  • 打赏
  • 举报
回复
这个应该是跟navicat自身机制有关。
wz07600 2012-09-03
  • 打赏
  • 举报
回复
新建工程试了一下,还是一样
wz07600 2012-09-03
  • 打赏
  • 举报
回复
只有50几万条数据,应该不是语句的原因,非常想不通的问题是在navicat中运行为什么是正常的,唯一的不同是自己写的程序通过mysql的odbc驱动而已。
kaikai_kk 2012-09-03
  • 打赏
  • 举报
回复
100ms和6s是差别很大,单单Open应该不会相差这么大
是不是ADO还执行其它事件,比如BeforeOpen,Afteropen,CalcFields,...等事件,都有代码

新建一个工程试试
专制的网站 2012-09-03
  • 打赏
  • 举报
回复
多少数据啊?6s 有点夸张...............

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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