Php 需要调试建议:使用ADOdb对oracle进行SQL查询花费的时间太长
我正在使用ADOdb for PHP库从oracle数据库访问一个包含600万行的视图表 在SUSE计算机中从web服务器运行以下SQL查询大约需要1分钟: $adodb_handle->ExecuteSELECT COUNTBEPROTEXT FROM从V_E_日志中选择BEPROTEXT,其中BEPROTEXT类似于“%jaya%” 在我的笔记本电脑上使用ADOdb lib从wamp运行相同的SQL查询大约需要7秒 如果运行以下SQL查询: $adodb_handle->ExecuteSELECT COUNTBEPROTEXT FROM V_E_LOG SUSE和笔记本电脑都需要大约3秒的时间 我不知道为什么SUSE机器的第一个查询需要这么长时间,1分钟? 你们能给我一些建议,我如何解决这个问题或者调试这个问题吗?我在这里走到了死胡同: 我估计有600万条线 是指表中的行数 桌子 什么是查询计划 这两个问题? 从SQL*Plus生成查询计划的步骤Php 需要调试建议:使用ADOdb对oracle进行SQL查询花费的时间太长,php,sql,oracle,adodb,Php,Sql,Oracle,Adodb,我正在使用ADOdb for PHP库从oracle数据库访问一个包含600万行的视图表 在SUSE计算机中从web服务器运行以下SQL查询大约需要1分钟: $adodb_handle->ExecuteSELECT COUNTBEPROTEXT FROM从V_E_日志中选择BEPROTEXT,其中BEPROTEXT类似于“%jaya%” 在我的笔记本电脑上使用ADOdb lib从wamp运行相同的SQL查询大约需要7秒 如果运行以下SQL查询: $adodb_handle->ExecuteSEL
SQL> set autotrace traceonly;
SQL> <<run your query>>
输出将是查询计划和一些执行统计数据。如果设置为autotrace on,则查询返回的实际数据将不会打印,同时显示查询输出和查询计划/执行统计信息。在此处发布快速查询和慢速查询的结果。为什么要对子查询进行计数 这样做不是更好吗
$adodb_handle->Execute("SELECT COUNT(BEPROTEXT),BEPROTEXT FROM V_E_LOG WHERE BEPROTEXT LIKE '%jaya%'");
顺便说一句,在一个相当大的表上使用两个通配符的LIKE可以非常快地降低查询执行时间,这取决于该表的增长率。很抱歉响应延迟。我设法解决了这个问题,但首先让我回答你们提出的一些问题 Justin Cave:我确实使用SqlDeveloper检查了查询计划,这为我指出了查询耗时如此之长的正确方向 Itroubs:我实际上使用datatables jquery插件在网页上显示数据。我需要进行fullquery/subquery计数以启用分页功能 我遇到的问题是,我的SUSE机器需要大约1分钟,而我的笔记本电脑需要大约3秒钟才能对同一oracle数据库执行相同的SQL查询语句。 经过一些调查,我意识到在从SUSE机器进行SQL查询之前,我设置了以下内容:
$adodb_handle->Execute("alter session set NLS_SORT=BINARY_CI");
$adodb_handle->Execute("alter session set NLS_COMP=LINGUISTIC");
它支持对该会话的oracle数据库进行不区分大小写的筛选。我没有在笔记本电脑上设置。
如果我不设置不区分大小写的内容,那么来自SUSE机器的查询现在需要大约3秒才能完成,这与我的笔记本电脑相同
谢谢大家的建议和知识分享。干杯SUSE机器和我的笔记本电脑都查询位于不同机器上的同一个oracle数据库。我笔记本电脑上的网络服务器是wamp。我不确定SUSE机器上的Apache是什么版本。我遇到的问题是,SUSE机器和我的笔记本电脑都运行相同的SQL语句,但从SUSE机器查询所需的时间比从笔记本电脑查询所需的时间长1分钟,而不是3秒。所有机器都位于同一个LAN上。最大的区别是,在第一次查询中,您要计算包含jaya的所有文本,因此sql server必须检查表中存储的每个字符串是否包含jaya。第二个只是计算每个文本的行数,等于表中的总行数。。。600万行表示表中的行数。什么是查询计划?对不起,这个业余的问题;