데이터베이스 개발에 PHP를 사용할 때 데이터베이스 쿼리의 성능을 향상시키는 방법은 항상 개발자가 우려하는 중요한 문제 중 하나였습니다. 특히 자주 실행되는 쿼리의 경우 매번 SQL 문을 다시 해제하는 데 많은 시간이 걸릴 수 있습니다. 다행스럽게도 MySQL의 MySQLI Extension은 STMT_INIT 기능을 제공하여 쿼리 캐시 최적화를 수행하여 성능을 향상시킬 수 있습니다.
PHP에서 MySQLI는 MySQL 데이터베이스와 상호 작용하는 인터페이스를 제공하며 STMT_INIT 함수는 명령문 개체를 초기화하는 데 사용되는 MySQLI 클래스의 메소드입니다. 후속 쿼리 준비 및 실행에 필요한 환경을 제공하고 전처리 명세서를 효과적으로 캐시하여 SQL 문의 반복적 인 구문 분석 시간을 줄일 수 있습니다.
mysqli :: stmt_init을 사용하여 전처리 명령문을 작성하면 mysql 데이터베이스 전처리가 SQL 문을 캐시합니다. 이러한 방식으로 동일한 쿼리가 여러 번 실행 되더라도 데이터베이스는 SQL 문을 한 번만 구문 분석하면 쿼리의 실행 속도를 크게 향상시킬 수 있습니다.
PHP에서 mysqli :: stmt_init 함수를 사용하는 단계는 매우 간단합니다. 다음은 stmt_init을 사용한 쿼리 캐시 최적화의 예입니다.
<?php
// a mysqli 인스턴스 및 데이터베이스에 연결하십시오
$mysqli = new mysqli("localhost", "username", "password", "database_name");
// 연결이 성공했는지 확인하십시오
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
// 사용 stmt_init 전처리 진술을 초기화하십시오
$stmt = $mysqli->stmt_init();
// 초기화가 성공했는지 확인하십시오
if ($stmt) {
// 준비하다 SQL 질문
$sql = "SELECT * FROM users WHERE email = ?";
// 전처리 SQL 질문
if ($stmt->prepare($sql)) {
// 바인딩 매개 변수
$stmt->bind_param("s", $email);
// 设置질문参数并执行질문
$email = "user@m66.net";
$stmt->execute();
// 获取질문结果
$result = $stmt->get_result();
// 输出질문结果
while ($row = $result->fetch_assoc()) {
echo "사용자 이메일: " . $row['email'] . "<br>";
echo "사용자 이름: " . $row['name'] . "<br>";
}
// 가까운 진술
$stmt->close();
} else {
echo "준비하다 SQL 질문失败: " . $mysqli->error;
}
} else {
echo "초기화 명세서에 실패했습니다: " . $mysqli->error;
}
// 데이터베이스 연결을 닫습니다
$mysqli->close();
?>
위의 코드를 통해 다음과 같은 중요한 최적화 지점을 볼 수 있습니다.
SQL 명령문 파싱 시간을 줄입니다 . STMT_INIT 및 준비가 실행될 때마다 MySQL 사전 처리 및 캐시스 SQL 문을 캐시합니다. 이러한 방식으로, 후속 실행에서 동일한 쿼리가 실행되면 SQL을 다시 구문 분석하고 캐시에서 직접 실행 계획을 얻을 필요가 없으므로 시간 간접비가 줄어 듭니다.
쿼리 성능 향상 : 특히 유사한 쿼리의 많은 경우 전처리 문을 사용하여 반복 구문 분석의 수를 줄여 데이터베이스의 쿼리 성능을 크게 향상시킬 수 있습니다.
매개 변수 바인딩 : Bind_Param을 사용하여 SQL 문의 반복 구조를 피하기 위해 매개 변수 바인드를 바인드하여 코드의 보안 및 가독성을 향상시킵니다.
mysqli :: stmt_init은 쿼리 성능을 효과적으로 향상시킬 수 있지만 다른 최적화 방법을 고려할 수도 있습니다.
캐시 결과 세트 : 자주 쿼리 된 데이터의 경우 매번 데이터베이스에 액세스하지 않도록 쿼리 결과를 캐시하기 위해 캐시 시스템 (예 : Redis 또는 Memcached)을 사용하는 것을 고려하십시오.
인덱스 최적화 : 쿼리와 관련된 열에 쿼리 작업 속도를 높이기 위해 데이터베이스에 적절한 색인이 있는지 확인하십시오.
배치 처리 쿼리 : 여러 번 실행되는 유사한 쿼리의 경우 매번 개별 실행 대신 쿼리의 배치 실행을 고려할 수 있습니다.
쿼리 캐시 최적화에 mysqli :: stmt_init를 사용하는 것은 PHP 응용 프로그램의 성능을 향상시키는 효과적인 방법입니다. 전처리 문 및 매개 변수 바인딩을 통해 SQL 구문 분석의 수를 줄이고 데이터베이스 쿼리의 효율성을 향상시킬 수 있습니다. 캐시 사용 및 인덱싱과 같은 다른 최적화 전략을 결합하면 애플리케이션의 전반적인 성능이 더욱 향상 될 수 있습니다.