Aujourd'hui, nous parlerons plus en détail des fonctions avancées du cache de requêtes de MySQL, c'est-à-dire la mise en cache et la mise en cache des requêtes !
Cause : (avertissement de débordement de mémoire)
PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted
1. Officiel
Parle principalement du cache. requêtes Si vous extrayez tout le contenu en même temps et le mettez en mémoire, il s'accumulera de plus en plus ; tandis que les requêtes non mises en cache reviendront directement une par une depuis le serveur MySQL, ce qui signifie qu'elles attendront que le processus PHP soit terminé. obtenir la prochaine donnée. (Il suffit de comprendre principalement le sens. Si vous voulez bien comprendre, veuillez traduire sur Weibo ou Baidu)
2. Requête Buffer et unBuffer
a ) Les requêtes hors cache sont généralement utilisées pour obtenir les données de requête une fois et seront stockées en mémoire
b) Les requêtes hors cache sont renvoyées directement depuis MySQL une par une et ne seront pas stockées en mémoire ;
3.mysqli, exemple de requête sans cache de 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; } }
Résumé :
Les requêtes mises en cache et les requêtes non mises en cache signifient en fait que les requêtes mises en cache provoqueront un débordement de mémoire lors de l'exploitation d'une grande quantité de données. À l'heure actuelle, les requêtes non mises en cache peuvent être utilisées pour empêcher cette situation de se produire, mais. vous devez faire attention à ce moment-là. Parce que mysql attendra que le programme php obtienne les données jusqu'à ce que toutes les données soient obtenues, il consommera donc les performances de MySQL. Alors, comment les utiliser correctement ? noyau, débordement de mémoire et consommation de performances MySQL, si vous comprenez bien ces deux éléments, vous saurez dans quels scénarios les utiliser. Si vous ne savez toujours pas comment les utiliser, vous pouvez laisser un message ou me tweeter !
Articles connexes :
Comment les « requêtes » et les « questions » MySQL sont mesurées
Comment détecter et éliminer les comportements inappropriés Requêtes MySQL
Vidéos associées :
Le dernier didacticiel vidéo de base MySQL de Han Shunping 2016
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!