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.
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.
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
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)
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);
Index 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.
Index 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
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.
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
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
É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
Comparez les valeurs pour éviter NULL
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.
Les colonnes de requête sont dans le même ordre que les colonnes d'index
Remplacer la clause EXISTS par une jointure multitable
utiliser les transactions