Maison > cadre php > Laravel > le corps du texte

Laravel optimise l'efficacité des requêtes

WBOY
Libérer: 2023-05-26 18:49:08
original
795 Les gens l'ont consulté

Lors du développement d'applications Web, interroger la base de données est une tâche inévitable, surtout lorsque la quantité de données est importante. L'efficacité de la requête affectera sérieusement les performances et l'expérience utilisateur de l'application. À cet égard, nous pouvons améliorer l'efficacité des requêtes grâce à certaines méthodes d'optimisation, notamment lors de l'utilisation du framework Laravel.

Voici quelques façons d'optimiser l'efficacité des requêtes Laravel :

Utiliser des index

Un index est un objet de base de données utilisé pour trier et rechercher les valeurs des colonnes dans une table. La création d'index peut accélérer les requêtes et l'accès aux données. Dans Laravel, nous pouvons utiliser des fichiers de migration pour créer des index pour les colonnes de table. Par exemple :

// 为 users 表的 email 列创建索引
Schema::table('users', function (Blueprint $table) {
    $table->index('email');
});
Copier après la connexion

De plus, vous pouvez utiliser la méthode unique() pour créer un index unique pour une colonne. Par exemple : unique() 方法来为列创建唯一索引。例如:

// 为 users 表的 email 列创建唯一索引
Schema::table('users', function (Blueprint $table) {
    $table->unique('email');
});
Copier après la connexion

需要注意的是,创建过多的索引也会降低数据库的性能,因此我们需要根据需要选择合适的索引。

使用软删除

Laravel 中的软删除是指将被删除的数据标记为已删除,而不是直接从数据库中删除。这样做的好处是可以防止误删除数据,并且可以在需要时轻松地恢复已删除的数据。在查询时,Laravel 默认不包括已删除的数据。因此,如果我们在删除数据时使用软删除,可以减少查询数据的数量,从而提高查询效率。

要使用软删除,只需为模型添加 SoftDeletes trait,并在相应的数据表中添加 deleted_at 列即可。例如:

use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentSoftDeletes;

class Post extends Model
{
    use SoftDeletes;

    protected $dates = ['deleted_at'];
}
Copier après la connexion

使用缓存

缓存是一种常用的优化查询效率的方法。通过将经常被访问的数据缓存到内存中,减少了重复查询的次数,加快了数据访问速度。在 Laravel 中,我们可以使用缓存来存储查询结果。例如:

// 将查询结果缓存 10 分钟
$users = Cache::remember('users', 10, function () {
    return DB::table('users')->get();
});
Copier après la connexion

在上述代码中,我们使用了 Cache::remember() 方法来缓存查询结果。该方法的第一个参数是缓存的键名,第二个参数是缓存的时间,第三个参数是执行查询的闭包函数。

懒惰加载

在查询关联模型时,Laravel 默认使用懒惰加载。即只有在访问关联模型时才会执行查询。这种方式可以避免在查询时同时查询大量的关联数据,从而提高了查询效率。例如:

$post = Post::find(1);

// 当需要访问 comments 时,才会执行查询
foreach ($post->comments as $comment) {
    //
}
Copier après la connexion

需要注意的是,如果查询时需要同时访问大量的关联数据,还是要慎重考虑使用懒惰加载。

预加载

预加载是指在查询时一次性查询所需数据和关联数据,并将其存储在内存中。这样可以减少查询的次数,提高查询效率。在 Laravel 中,我们可以使用 with() 方法来进行预加载。例如:

$posts = Post::with('comments')->get();
Copier après la connexion

在上述代码中,我们使用 with() 方法来预加载了 commentsrrreee

Il convient de noter que créer trop d'index réduira également les performances de la base de données, nous devons donc choisir l'index approprié en fonction de nos besoins.

Utilisation de la suppression logicielle🎜🎜La suppression logicielle dans Laravel fait référence au marquage des données supprimées comme supprimées au lieu de les supprimer directement de la base de données. L'avantage est que cela empêche la suppression accidentelle des données et vous permet de récupérer facilement les données supprimées en cas de besoin. Laravel n'inclut pas les données supprimées par défaut lors de l'interrogation. Par conséquent, si nous utilisons la suppression logicielle lors de la suppression de données, nous pouvons réduire la quantité de données de requête, améliorant ainsi l'efficacité des requêtes. 🎜🎜Pour utiliser les suppressions logicielles, ajoutez simplement le trait SoftDeletes à votre modèle et ajoutez la colonne deleted_at à la table de données correspondante. Par exemple : 🎜rrreee🎜Utilisation de la mise en cache🎜🎜La mise en cache est une méthode couramment utilisée pour optimiser l'efficacité des requêtes. En mettant en cache les données fréquemment consultées dans la mémoire, le nombre de requêtes répétées est réduit et la vitesse d'accès aux données est accélérée. Dans Laravel, nous pouvons utiliser la mise en cache pour stocker les résultats des requêtes. Par exemple : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons la méthode Cache::remember() pour mettre en cache les résultats de la requête. Le premier paramètre de cette méthode est le nom de la clé de cache, le deuxième paramètre est la durée du cache et le troisième paramètre est la fonction de fermeture qui exécute la requête. 🎜🎜Chargement paresseux🎜🎜Lors de l'interrogation de modèles associés, Laravel utilise le chargement paresseux par défaut. Autrement dit, la requête ne sera exécutée que lors de l'accès au modèle associé. Cette méthode peut éviter d'interroger une grande quantité de données associées en même temps pendant la requête, améliorant ainsi l'efficacité des requêtes. Par exemple : 🎜rrreee🎜Il convient de noter que si vous devez accéder à une grande quantité de données associées en même temps lors de l'interrogation, vous devez soigneusement envisager d'utiliser le chargement différé. 🎜🎜Préchargement🎜🎜Le préchargement signifie interroger les données requises et les données associées en même temps pendant le temps de requête et les stocker en mémoire. Cela peut réduire le nombre de requêtes et améliorer l’efficacité des requêtes. Dans Laravel, nous pouvons utiliser la méthode with() pour précharger. Par exemple : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons la méthode with() pour précharger le modèle comments associé. De cette façon, tous les messages et commentaires peuvent être interrogés en même temps et renvoyés ensemble au client. 🎜🎜Pour résumer, en utilisant des techniques telles que l'indexation, la suppression logicielle, la mise en cache, le chargement paresseux et le préchargement, vous pouvez optimiser efficacement l'efficacité des requêtes Laravel et améliorer les performances des applications et l'expérience utilisateur. 🎜

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal