加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – sqlsrv驱动措施在codeigniter中速率慢?

发布时间:2021-03-05 18:55:26 所属栏目:编程 来源:网络整理
导读:我已经安装了最新版本的CI 2.1.3 此刻运行查询后,我的相应时刻很是慢,很是简朴,譬喻: function Bash(){ $sql = “SELECT * FROM Contacts”;$stmt = sqlsrv_query( $conn,$sql );if( $stmt === false) { die( print_r( sqlsrv_errors(),true) );} 查询长途数

我已经安装了最新版本的CI 2.1.3

此刻运行查询后,我的相应时刻很是慢,很是简朴,譬喻:

function Bash(){


    $sql = “SELECT * FROM Contacts”;
$stmt = sqlsrv_query( $conn,$sql );
if( $stmt === false) {
  die( print_r( sqlsrv_errors(),true) );
}

查询长途数据库后. (Sql server 2008)

当我在一个简朴的PHP剧本中针对统一个长途数据库运行沟通的查询时.我立即获得了功效.

a)有没有其他人在codeigniter中行使sqlsrv驱动措施碰着此题目?

假如是这样,你是怎样办理的?

这是我的毗连字符串:

$db['default']['hostname'] = "xxxxx,1433";
$db['default']['username'] = "xx";
$db['default']['password'] = "xxxxxx-xx";
$db['default']['database'] = "xxxxxxxxx";
$db['default']['dbdriver'] = "sqlsrv";
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = TRUE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

更新:

我在运行探查器时发明白以下内容.

数据库:数据库查询:1(潜匿)
0.0659从接洽人中选择*

加载时刻:根基类0.0428
节制器执行时刻(接待/ AzureBash)58.2173
总执行时刻58.2602

好像查询在0.06秒内执行,但节制器花了一分钟加载.

不知道为什么会这样.

最新的SQLSRV驱动措施的勾当记录接口是错误的.

因此,下载并包围现有界面(包围CI中数据库文件夹中的sqlsrv文件夹):

http://www.kaweb.co.uk/blog/mssql-server-2005-and-codeigniter/

留意:这些已颠末SQL Azure测试而且有用.

$查询 – > NUM_ROWS();不合用于这些驱动措施,以是我提议你行使count取代.可能建设本身的包装器.

另外,date此刻是功效齐集的日期工具范例.

我但愿这有辅佐.

办理方案2

假如因为某种缘故起因你发明白一个让它完全无法行使的错误.规复到最初提供的sqlsrv接口.你会发明导致题目的缘故起因是原始接口执行查询的方法,因此,建设一个数据库助手类;行使$sql = $this-> db-> last_query();获取您要执行的查询,然后在database_helper类中本身执行:

function MakeDbCall ($sql)
{
$serverName = "xxxxx-xxxx-xxx,1433"; //serverNameinstanceName
$connectionInfo = array( "Database"=>"xxx","UID"=>"xx","PWD"=>"xxxxx","ConnectionPooling" => "1");



 $conn = sqlsrv_connect($serverName,$connectionInfo);
 $stmt = sqlsrv_query($conn,$sql);

 while( $row = sqlsrv_fetch_array( $stmt,SQLSRV_FETCH_ASSOC) ) {
      $result_array[] = $row;
}

return $result_array;

}

为row_array建设一个.

您应该可以从应用中的任何位置直接挪用此成果.同时操作active_records构建查询的方法.

不是一个抱负的办理方案,可是在codeigniter对它们的SQLSRV类举办排序之前,我们无法做许多工作.

办理要领

在谜底已被接管后添加谜底,由于我找到了差异的办理方案.我碰着了同样的题目…轮回功效集很是慢.我打开了system / database / drivers / sqlsrv / sqlsrv_driver.php并找到了毗连成果.我留意到这是行使SQLSRV_CURSOR_STATIC选项.我将其变动为SQLSRV_CURSOR_CLIENT_BUFFERED,我的慢速题目消散了.请参阅此处的文档:

http://msdn.microsoft.com/en-us/library/hh487160(v=sql.105).aspx

我诚恳说不知道php的sql server驱动措施是做什么的,可是,思量到加快等,我可以揣摩驱动措施也许默认行使游标.这好像是个糟糕的主意.我也假设通过选择client_buffered,查询的数据将在没有光标的环境下读取并在客户端的内存中会见,就像它是一个游标一样.假如是这种环境,假如您实行执行具有很多行要读取的查询,则也许会产生错误.大概另一个选项(SQLSRV_CURSOR_FORWARD?)可用于在没有游标的环境下读取数据 – 但我确名誉于会见查询的要领将越发有限(譬喻,不行使result_array())

-Don

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读