오늘은 MySQL의 쿼리 캐시의 고급 기능인 쿼리 캐시와 쿼리 비 캐시에 대해 자세히 설명하겠습니다!
원인: (메모리 오버플로 경고)
PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted
1 공식
#🎜🎜 #가장 중요한 것은 캐시된 쿼리가 모든 콘텐츠를 한 번에 찾아 메모리에 저장한다는 것입니다. 그러면 캐시되지 않은 쿼리가 하나씩 MySQL 서버에서 직접 반환됩니다. 그들은 PHP 프로세스가 올 때까지 기다릴 것입니다. (주로 의미를 이해하면 충분합니다. 완전히 이해하려면 WeChat 또는 Baidu에서 번역하십시오.) 🎜🎜# a) 캐시된 쿼리는 일반적으로 쿼리 데이터를 한 번 가져와 메모리에 저장하는 데 사용됩니다. 🎜#
b) 캐시되지 않은 쿼리는 MySQL에서 하나씩 직접 반환됩니다.3.mysqli, 비- pdo의 캐시 쿼리 예
<?php##mysqli $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT); if ($uresult) { while ($row = $uresult->fetch_assoc()) { echo $row['Name'] . PHP_EOL; } } $uresult->close(); ##pdo $pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass'); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); $uresult = $pdo->query("SELECT Name FROM City"); if ($uresult) { while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) { echo $row['Name'] . PHP_EOL; } } ##mysql 会被抛弃的,了解下即可 $conn = mysql_connect("localhost", "my_user", "my_pass"); $db = mysql_select_db("world"); $uresult = mysql_unbuffered_query("SELECT Name FROM City"); if ($uresult) { while ($row = mysql_fetch_assoc($uresult)) { echo $row['Name'] . PHP_EOL; } }Summary:
캐시된 쿼리 및 비- 여기서 캐시된 쿼리는 실제로 많은 양의 데이터를 연산할 때 메모리 오버플로를 발생시키는 캐시된 쿼리이며, 이러한 상황을 방지하기 위해 캐시되지 않은 쿼리를 사용할 수도 있지만, mysql은 기다리기 때문에 이때 주의해야 할 점은 다음과 같습니다. php 프로그램은 데이터를 모두 얻을 때까지 데이터를 얻기 때문에 MySQL의 성능을 소모하게 되는데, 그렇다면 어떻게 올바르게 사용해야 할까요? 이 두 가지를 잘 이해하면 어떤 시나리오에서 사용되는지 알 수 있습니다. 그래도 사용 방법을 모르면 메시지를 남기거나 저에게 트윗하세요! 관련 기사:
MySQL '쿼리' 및 '질문' 측정 방법
위 내용은 MySQL의 버퍼링된 쿼리와 버퍼링되지 않은 쿼리 및 캐시되지 않은 pdo 쿼리 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!