mobile-best-practice/chapters/MBP_024_fr.md

3.2 KiB

Concevoir et manipuler la base de données SQLite de manière optimale

Identifiants

// TODO

Catégories

Cycle de vie Tiers Responsable
3. Réalisation (fabrication / développement) Terminal utilisateur Architecte Logiciel/Développeur

Indications

Degré de priorité Mise en oeuvre Impact écologique
3 3 3
Ressources Economisées
Processeur / Mémoire vive

Description

Lors de la conception de la base de données SQLite locale, il existe plusieurs optimisations pouvant être faite permettant de réduire la consommation mémoire et les cycles processeurs nécessaires lors de l'exécution de certaines requêtes. Par exemple :

  • L'utilisation de PRIMARY KEY sur l'identifiant d'une donnée permet de bénéficier d'une recherche par identifiant optimisée (reposant sur l'utilisation en interne d'un B-Tree)
  • Pour optimiser les requêtes sur un champ spécifique de type filtrage WHERE, tri ORDER BY ou regroupement GROUP BY, il peut être intéressant d'ajouter un index sur ce champ. Attention cependant a ne pas créer inutilement un index, car cette pratique a un coût en termes de stockage.
  • Si la donnée à stocker est volumineuse, stocker plutôt cette donnée dans un fichier, et si besoin référencer le chemin vers ce fichier dans la base de donnée locale.
  • Lors de la lecture, récupérer uniquement les données dont l'application a besoin.
  • Utiliser au maximum les opérateurs de requêtes fournis par SQL comme les requêtes imbriquées ou les jointures plutôt que de faire ces manipulations dans le code. En effet, ces opérateurs sont optimisés.
  • En cas d'insertion multiple de données, utiliser une transaction plutôt que d'effectuer unitairement chaque insertion.

Exemple

  • Soit une application permettant de gérer des contacts. Si notre application est susceptible de vouloir accéder à un contact précis à partir de son identifiant, écrire :
CREATE TABLE Contact(
  id INTEGER PRIMARY KEY,
  name TEXT,
  city TEXT
);

plutôt que :

CREATE TABLE Contact(
  id INTEGER,
  name TEXT,
  city TEXT
);
  • Sur cette même application de gestion de contacts, les requêtes de ce style sont fréquemment exécutées :
  SELECT id, name
  WHERE city = 'Lille, France';

Pour optimiser ce genre d'opération, créer un index comme ceci :

CREATE INDEX city_index ON Contact(city);
  • Récupérer les données dont nous avons besoin :
SELECT name
FROM Customers
LIMIT 10;

plutôt que :

SELECT *
FROM Customers;

Source : SQLite performance best practices

Principe de validation

Le nombre ... est inférieur ou égal à
de requêtes SQL à l'intérieur d'une boucle 0