首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 與 MySQL 效能優化:程式碼寫法比較與分析

     編輯:PHP 綜合知識

在開發 PHP 搭配 MySQL 的應用程式時,程式碼的撰寫方式直接影響執行效能。本文透過實際程式碼範例,比較不同寫法對查詢速度的影響,並提供優化建議。

常見分頁查詢的效能陷阱

以下程式碼展示典型的分頁邏輯,但存在幾個效能問題:

<?php
include_once("../db.php");

// 依據 GET 參數建構 WHERE 條件
if ($_GET['x2'] == 0 && $_GET['x1'] == 0) {
    $t = " s1='' ";
} else {
    if ($_GET['x2'] != 0) {
        $t = " x2='{$_GET['x2']}' ";
    } else if ($_GET['x1'] != 0) {
        $t = " x1='{$_GET['x1']}' and x2=0 ";
    }
}

// 查詢總筆數
$query = "select count(*) from ask_member where $t";
$result2 = mysql_db_query($DataBase, $query);
$r3 = mysql_fetch_array($result2);
$amount = $r3[0];

// 計算總頁數
$page_size = 5;
if ($amount % $page_size == 0 && $amount > 0) {
    $pagecount = ($amount / $page_size);
} else {
    $pagecount = intval($amount / $page_size) + 1;
}
// ... 後續分頁顯示邏輯
?>

主要效能問題分析

  1. 使用已棄用的 mysql_* 函式:`mysql_db_query`、`mysql_fetch_array` 等在 PHP 5.5.0 棄用,PHP 7.0.0 移除。應改用 PDO 或 MySQLi。
  2. SQL 注入風險:直接將 `$_GET` 參數拼接進 SQL 字串,極易遭受注入攻擊。必須使用預備語句。
  3. 重複查詢總筆數:每次分頁請求都執行 `COUNT(*)`,對大資料表造成負擔。可考慮快取總筆數或使用 `SQL_CALC_FOUND_ROWS`。
  4. 缺乏索引優化:`WHERE` 條件欄位(x1、x2、s1)若無索引,全表掃描會隨資料量增長而嚴重拖慢速度。

優化建議

  • 改用 PDO 預備語句:`$stmt = $pdo->prepare("SELECT COUNT(*) FROM ask_member WHERE x2 = ?");`
  • 為常用查詢欄位建立複合索引:`ALTER TABLE ask_member ADD INDEX idx_x1_x2 (x1, x2);`
  • 使用 `LIMIT` 進行分頁查詢,避免一次撈取過多資料。
  • 考慮使用 Redis 或 Memcached 快取熱門分頁的總筆數與資料。

後續頁面將深入探討索引策略、查詢快取、連線池等進階優化技巧。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved