本文目錄一覽:
- 1、PHP循環代碼不斷獲取數據庫內容,導致數據讀取很慢,怎麼去修改下面的代碼讓數據讀取快點?(Thinkphp)
- 2、php php for循環查詢數據庫效率低,該如何優化mysql mysql
- 3、where($map)->relation(true)->select();}’ title=’請教thinkphp循環檢索速度慢,語句:for(…){$list=$model->where($map)->relation(true)->select();}’>請教thinkphp循環檢索速度慢,語句:for(…){$list=$model->where($map)->relation(true)->select();}
- 4、PHP程序寫得越多發現響應速度越慢,請問寫程序中應該注意些什麼?我是新手!怎麼提高程序響應時間!
- 5、php foreach 嵌套循環大數組很慢?
- 6、php數據多影響返回速度嗎
PHP循環代碼不斷獲取數據庫內容,導致數據讀取很慢,怎麼去修改下面的代碼讓數據讀取快點?(Thinkphp)
數據庫的讀取能一次查詢完成的盡量不要分成多次查詢
不知道你用的是什麼框架,如果有where_in方法的話可以用它來解決,先要構造出order_sn值的數組
沒有的話就自己構造’or’條件字符串,然後用where一次查詢完成
php php for循環查詢數據庫效率低,該如何優化mysql mysql
那就用sphinx 技術,目前這個是最好的,沒有之一。
下面是我百度百科弄過來的,怎麼使用還得你自己看白皮書了。
Sphinx的主要特性包括:
高速索引 (在新款CPU上,近10 MB/秒);
高速搜索 (2-4G的文本量中平均查詢速度不到0.1秒);
高可用性 (單CPU上最大可支持100 GB的文本,100M文檔);
提供良好的相關性排名
支持分布式搜索;
提供文檔摘要生成;
提供從MySQL內部的插件式存儲引擎上搜索
支持布爾,短語, 和近義詞查詢;
支持每個文檔多個全文檢索域(默認最大32個);
支持每個文檔多屬性;
支持斷詞;
支持單字節編碼與UTF-8編碼。[1]
where($map)->relation(true)->select();}’>請教thinkphp循環檢索速度慢,語句:for(…){$list=$model->where($map)->relation(true)->select();}
肯定會很慢,for循環一次那就讀取數據庫一次,循環上萬次你說數據庫能受得了不?最好一次去除數據,然後再對去除的數據操作
PHP程序寫得越多發現響應速度越慢,請問寫程序中應該注意些什麼?我是新手!怎麼提高程序響應時間!
舉個簡單的例子
循環一個數組時需要計算數組的長度.
通常,我們這麼寫
//$arr是一個數組;
for($i=0;$icount($arr);$i++){
/******這就是一個速度較慢的循環,因為每一次循環的時候都要運行count()計算數組長度*******/
}
//正確的寫法應該是
$count=count($arr);
for($i=0;$i$count;$i++){
/*****代碼*******/
}
//再舉個例子
echo ‘1’.’2′;慢;
echo ‘1’,’2′;快;
//還有帶引號”和雙引號””,單引號更快;
//數組的鍵位例如$arr[key]的寫法就不如$arr[‘key’]的快
/*同樣的,php在鏈接數據庫或者操作一些文件的時候;要做垃圾處理,在資源使用完畢時,要及時的關閉鏈接通道,清空結果集和占內存的變量;*/
/*還有很重要的一點,能在php程序里執行的任務,就不要跑到mysql里執行,好好的寫你的查詢語句*/
php foreach 嵌套循環大數組很慢?
雙層循環啊, 數量是 $gift * $fi的個數。 百萬級別的。
簡單的就是將excel中的數據導入的數據庫中(可以是另外一個表),將驗證碼字段建索引。然後再排查重複的,純sql就很快了。
php數據多影響返回速度嗎
框架用的是ci,數據庫是sqlsrv(sql server 2008),sql查詢返回的結果集有2萬條數據,我在ci框架裡面執行這個sql語句,網頁一直在轉圈,2萬條數據要轉30秒左右,但是我的sql語句在sql server 2008 R2 裡面執行 是秒查,在ci裡面用自帶查詢sql執行時間是200毫秒,,說明我的語句並不慢。個人覺得應該是返回數據太多導致慢的,返回的是2萬條數據,20個字段左右,,因為我做的是統計 ,要把數據導出成csv文件,所以數據比較多,這個該怎麼處理?
我的sql 語句是select * from table where create_time between ‘xxxx-xx-xx 00:00:00’ and ‘xxxx-xx-xx 23:59:59’; 是根據時間段來的 如果用戶選擇的時間範圍小 那數據就少 如果範圍大 那數據就大 數據大的時候就很慢
public function aa(){
$sql =”select * from table where create_time between ‘xxxx-xx-xx 00:00:00’ and ‘xxxx-xx-xx 23:59:59′”;
$result=$this-db-query($sql)-result_array();
}
這已經是最簡單的查詢了,sql語句秒查,但是用瀏覽器執行就很慢,
我在瀏覽器裡面執行 , 如果查詢結果幾萬條的話 瀏覽器就一直轉圈,要等四十多秒,500條足有數據是3、4秒
我在想是不是result_array()這一步 需要循環需要花費太多的時間,本身記錄就有幾萬條,然後還有二十個字段
==============2017-05-16 16:01更新===============
我沒有用ci框架自帶的result_array() ,查看ci框架文檔的時候看到一段話:
經常的,你會需要提供一個數據庫的 connection ID 或是一個 result ID, connection ID 可以這樣來
$this-db-conn_id;
result ID 可以從查詢返回的結果對象獲取,像這樣:
$query = $this-db-query(“SOME QUERY”);
$query-result_id;
於是我修改了我的代碼 拿 result_id 去循環讀取每條記錄
$sql =”select xxx”;
$query=$this-db-query($sql);
//這裡因為我用的是sqlsrv 所以使用的是sqlsrv_fetch_array 來循環讀取每一行
//然後每讀一行 就寫如csv文件
while($row=sqlsrv_fetch_array($query-result_id,SQLSRV_FETCH_ASSOC)){
//這裡是把row 寫入csv文件的代碼
}
具體的代碼就是下面了
$sql=”xxx”;
$query=$this-db-query($sql);
$filename= “CostDetail.csv”;//導出的文件名
header(‘Content-Type: application/vnd.ms-excel’);
header(‘Content-Disposition: attachment;filename=”‘.$filename.'”‘);
header(‘Cache-Control: max-age=0’);
// 打開PHP文件句柄,php://output 表示直接輸出到瀏覽器
$fp = fopen(‘php://output’, ‘a’);
// 輸出Excel列名信息
$head = array(xxx);
foreach ($head as $i = $v) {
// CSV的Excel支持GBK編碼,一定要轉換,否則亂碼
$head[$i] = iconv(‘utf-8’, ‘gbk’, $v);
}
// 將數據通過fputcsv寫到文件句柄
fputcsv($fp, $head);
// 計數器
$cnt = 0;
// 從數據庫中獲取數據,為了節省內存,不要把數據一次性讀到內存,從句柄中一行一行讀即可
$limit = 5000;
while ($row=sqlsrv_fetch_array($query-result_id,SQLSRV_FETCH_ASSOC)){
$cnt ++;
if ($limit == $cnt) { //刷新一下輸出buffer,防止由於數據過多造成問題
ob_flush();
flush();
$cnt = 0;
}
//這裡是把每個字段的編碼轉成gbk
$newRow[] = $this-_mb_convert_encoding($row[‘edis_orgsoid’]);
….
unset($row);
fputcsv($fp, $newRow);
unset($newRow);
}
exit;
這樣能導出文件 但是我看了一下 19204行的,16列 的csv文件 3M左右 , 需要40-45秒的時間才能導出好,,我想問這時間還能優化的再快點嗎
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/271730.html