为什么SQLyog返回的MySQL查询结果比我的Delphi程序快10倍?

cja*_*cja 2 mysql delphi optimization odbc

select rectype,jobid,jobrecid,template,assignedto,entereddt,enteredby,ref1,processed,processeddt,
processbydt,title,description,connectlanhandle,finished,updateddt,ref2,cancelled,
requireaccept,acceptrejectstate,acceptrejectbydt,alert1dt,alert2dt,alert3dt,despatchallowed,
flag,ref3,projectid,duration,skillset,postcode,prefschedulefrom,prefscheduleto,customdata1,
customdata2,customdata3,hasnotes,displayjobtype,createdby,createddt,colour
 from jobs
 where updateddt >= '1982-02-05 17:25:38'
 or (processed = 'N' and
     cancelled = 'N')
 order by jobid, jobrecid
Run Code Online (Sandbox Code Playgroud)

此查询返回~80000结果.SQLyog(MySQL gui)可以在~600ms内在可见网格中返回结果.我的Delphi程序使用ODBC(最新的MyODBC驱动程序)进行连接,只需要6000毫秒即可完成查询,甚至无需查看结果.

关于如何使我的程序更快的任何想法?

Jon*_*eet 6

我的猜测是SQLyog实际上并没有在600ms内显示所有80,000个结果 - 它可能仍在加载后者,而它显示的是第一个.(特别是,即使没有涉及数据库,我见过的大多数GUI框架都无法快速填充80,000行.)

您可以尝试做同样的事情,假设您正在使用的API允许您以流式方式获得结果(而不是在调用返回之前将所有内容传输到内存中).


Moh*_*man 5

我已经在基本表(没有加入)上尝试了这个,并且发现即使你点击"全部显示"复选框,SQLyog也不会立即将所有结果带到网格上,通过将滚动按钮移动到最低区域来尝试自己你会发现sqlyog会减速一会儿,并带来更多的结果.

也知道ODBC更慢,因为它为本机访问添加了更多层,所以尝试使用DevArt中的MyDac,它使用直接访问mysql(即使没有mysql客户端库).

而且最重要的是,永远不要试图一次向用户显示80,000条记录.

BTW,使用Delphi构建的sun 官方MySql GUI工具 ;-)