65 votes

Avec SQLite, comment indexer les colonnes dans une instruction CREATE TABLE ?

Comment indexer une colonne dans mon instruction CREATE TABLE ? La table ressemble à

command.CommandText =
    "CREATE TABLE if not exists file_hash_list( " +
        "id    INTEGER PRIMARY KEY, " +
        "hash  BLOB NOT NULL, " +
        "filesize INTEGER NOT NULL);";
command.ExecuteNonQuery();

Je veux que la taille des fichiers soit indexée et je voudrais qu'elle soit de 4 octets.

120voto

hobbs Points 71946

On ne peut pas faire précisément ce que vous demandez, mais contrairement à certains SGBDR, SQLite est capable d'exécuter des DDL à l'intérieur d'une transaction, avec le résultat approprié. Cela signifie que si vous êtes vraiment préoccupé par le fait que rien ne verra jamais file_hash_list sans index, vous pouvez faire ce qui suit

BEGIN;
CREATE TABLE file_hash_list (
  id INTEGER PRIMARY KEY,
  hash BLOB NOT NULL,
  filesize INTEGER NOT NULL
);
CREATE INDEX file_hash_list_filesize_idx ON file_hash_list (filesize);
COMMIT;

ou l'équivalent en utilisant les primitives de transaction de la bibliothèque de base de données que vous avez.

Je ne suis pas sûr de savoir comment nécessaire Mais ce n'est pas vraiment le cas, comparé à l'exécution de ces deux commandes en dehors d'une transaction.

Comme d'autres l'ont souligné, les index de SQLite sont tous des B-trees ; vous n'avez pas à choisir le type ou la portion de la colonne qui est indexée ; la totalité de la ou des colonnes indexées sont dans l'index. Il sera toujours efficace pour les requêtes de plage, il pourrait juste prendre un peu plus d'espace disque que vous ne le souhaitez.

5voto

Björn Points 15485

Je ne pense pas que tu puisses. Pourquoi ne pas utiliser une seconde requête ? Et spécifier la taille de l'index semble être impossible en SQLite. Mais là encore, c'est SQ_Lite_ ;)

create index
    myIndex
on
    myTable (myColumn)

-8voto

kriss Points 10450

Il suffit de remplacer filesize INTEGER NOT NULL avec filesize INTEGER UNIQUE NOT NULL . Le mot-clé unique créera l'index.

Vous pouvez également exécuter une commande CREATE INDEX distincte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X