Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要调试建议:使用ADOdb对oracle进行SQL查询花费的时间太长_Php_Sql_Oracle_Adodb - Fatal编程技术网

Php 需要调试建议:使用ADOdb对oracle进行SQL查询花费的时间太长

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

我正在使用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生成查询计划的步骤

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万行表示表中的行数。什么是查询计划?对不起,这个业余的问题;