Android --- Optimisation SQLite

SQLite est une base de données légère, un système de gestion de base de données relationnelle compatible ACID, contenu dans une bibliothèque C relativement petite. Il s'agit d'un projet du domaine public établi par D.RichardHipp. Il est conçu pour être embarqué et a été utilisé dans de nombreux produits embarqués. Il occupe très peu de ressources. Dans les dispositifs embarqués, seules quelques centaines de Ko de mémoire peuvent suffire. Il peut prendre en charge les systèmes d'exploitation courants tels que Windows/Linux/Unix, et peut être combiné avec de nombreux langages de programmation, tels que Java, C#, PHP, Tcl, etc., et dispose d'une interface ODBC. Comparé à Mysql et PostgreSQL, les deux mondes open source En ce qui concerne le célèbre système de gestion de base de données, sa vitesse de traitement est plus rapide qu'eux. La première version Alpha de SQLite est née en mai 2000, et cela fait 16 ans depuis 2016. SQLite a également inauguré une nouvelle version SQLite3, qui a été publiée.

Type de données SQLite

Chaque valeur stockée dans une base de données SQLite possède l'un des types de stockage suivants : 

Type de stockage décrire
NUL  La valeur est une valeur NULL.
ENTIER La valeur est un entier signé stocké sur 1, 2, 3, 4, 6 ou 8 octets selon la taille de la valeur
RÉEL La valeur est une valeur à virgule flottante stockée sous la forme d'un nombre à virgule flottante IEEE de 8 octets
TEXTE La valeur est une chaîne de texte, stockée à l'aide de l'encodage de la base de données (UTF-8, UTF-16BE ou UTF-16LE)
GOUTTE La valeur est un blob de données que flex stocke en fonction de son entrée

Syntaxe SQL de base

Langage de définition de données DDL

Commande décrire
CRÉER Créer une nouvelle table , vue d'une table ou autre objet dans la base de données
MODIFIER Modifier un objet de base de données existant dans la base de données, tel qu'une table
GOUTTE Supprimer une table entière , ou une vue d'une table, ou un autre objet dans la base de données

 Langage de manipulation de base de données DML

Commande décrire
INSÉRER Insérer un enregistrement dans la table
MISE À JOUR enregistrement des modifications
SUPPRIMER Supprimer l'enregistrement

Langage de requête de données DQL

Commande décrire
SÉLECTIONNER récupérer certains enregistrements d'une ou plusieurs tables

Optimisation SQLite (Entretien)

indice

En termes simples, un index est un pointeur vers des données dans une table. Un index dans une base de données est très similaire à un index dans un livre. Prenons l'exemple de la page catalogue (index) du dictionnaire chinois, on peut trouver rapidement le mot recherché dans le catalogue (index) trié par pinyin, traits, radicaux, etc.

  \balle Avantages : accélère considérablement la récupération de la base de données, y compris les requêtes à table unique, les requêtes à table liée, les requêtes de groupe et les requêtes de tri. Souvent un ordre de grandeur ou deux dans l'amélioration des performances, augmentant par ordre de grandeur avec les données.

  \balle Inconvénients : La création et la maintenance de l'index consomment, et l'index occupe de l'espace physique, qui augmente avec l'augmentation du volume de données. Les index doivent être conservés lors de l'ajout, de la suppression et de la modification de la base de données, ce qui affectera les performances d'ajout, de suppression et de modification.

classement de l'indice

  \balle Créer directement l'index : utilisez l'instruction sql pour créer, sous Android, vous pouvez directement créer l'instruction excuSql dans onCreate ou onUpgrade de SQLiteOpenHelper.

create index id_index on user(id)

  \balle Index unique : assurez-vous que toutes les données de la colonne d'index sont uniques et peuvent être utilisées pour les index clusterisés et non clusterisés

create unique index id_index on user(id);

  \balleIndex unique : un seul champ  est inclus dans l'instruction de création d'index , comme les exemples de création d'index ordinaire et d'index unique ci-dessus.

  \balleIndex composite : également appelé index composite, qui inclut plusieurs champs  dans l'instruction de création d'index en même temps

create index cx_index on user(id, name);

scènes à utiliser

  \balle Il est recommandé d'utiliser un index lorsque la fréquence de mise à jour des données d'un certain champ est faible, la fréquence des requêtes est élevée et les requêtes de plage (>, <, =, >=, <=) ou trier par, grouper par se produisent souvent. Et plus la sélectivité est grande, plus il est avantageux de construire un index, ici la sélectivité fait référence au nombre de valeurs uniques dans un champ/nombre total.

  \balle Plusieurs colonnes sont souvent accessibles en même temps et chaque colonne contient des valeurs répétées. Envisagez de créer un index composite.

Règles d'utilisation de l'index

  \balle Pour les index composés, la colonne la plus fréquemment utilisée est utilisée comme colonne principale (le premier champ de l'index). Si la colonne principale n'est pas dans la condition de requête lors de la requête, l'index composite ne sera pas utilisé.

create index complex_index on user(id, name);
select * from user where id > 3; --使用了索引
select * from user where name like 'z*'; --未使用索引
--检验是否使用了索引
sqlite> explain query plan select * from user where id > 3;
QUERY PLAN
--SEARCH TABLE user USING INDEX sqlite_autoindex_user_1 (id>?)
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> explain query plan select * from user where name like 'z*'
QUERY PLAN
--SCAN TABLE user
Run Time: real 0.001 user 0.000000 sys 0.000000

  \balle Évitez de calculer la colonne d'index. Si un calcul sur la colonne de la clause where ne peut pas être compilé et optimisé, cela entraînera l'échec de l'index lors de l'interrogation.

select * from user where cast(id as char) = '3';
--检验
explain query plan select * from user where cast(id as char) = '3';
QUERY PLAN
--SCAN TABLE user
Run Time: real 0.001 user 0.000000 sys 0.000000

  \balle Comparez les valeurs pour éviter NULL

  \balle Lorsque vous interrogez plusieurs tables, veillez à sélectionner la table appropriée comme table interne. Les condi la table intérieure, et le plus petit produit est la meilleure solution. Avant que l'opération multitable réelle ne soit réellement exécutée, l'optimiseur de requête répertorie plusieurs groupes de schémas de connexion possibles en fonction des conditions de connexion et trouve le meilleur schéma avec le moins de surcharge système.

  \balle Les colonnes de requête sont dans le même ordre que les colonnes d'index

  \balle Remplacer la clause EXISTS par une jointure multitable

utiliser les transactions

Je suppose que tu aimes

Origine blog.csdn.net/qq_44950283/article/details/131191587
conseillé
Classement