Apache Derby - Index de Derby

Un index dans une table n'est rien d'autre qu'un pointeur vers ses données. Ceux-ci sont utilisés pour accélérer la récupération des données à partir d'une table.

Si nous utilisons des index, les instructions INSERT et UPDATE sont exécutées dans une phase plus lente. Alors que SELECT et WHERE sont exécutés en moins de temps.

Créer un index

L'instruction CREATE INDEX est utilisée pour créer un nouvel index dans une table de la base de données Derby.

Syntaxe

Voici la syntaxe de l'instruction CREATE INDEX -

CTREATE INDEX index_name on table_name (column_name);

Exemple

Supposons que nous ayons créé une table nommée Employés dans Apache Derby, comme indiqué ci-dessous.

CREATE TABLE Emp ( Id INT NOT NULL GENERATED ALWAYS AS IDENTITY,
   Name VARCHAR(255),
   Salary INT NOT NULL,
   Location VARCHAR(255),
   Phone_Number BIGINT
);

L'instruction SQL suivante crée un index sur la colonne nommée Salaire dans la table Employés.

ij> CREATE INDEX example_index on Emp (Salary);
0 rows inserted/updated/deleted

Créer un index UNIQUE

Dans Apache Derby, les index UNIQUE sont utilisés pour l'intégration des données. Une fois que vous avez créé un index UNIQUE sur une colonne d'une table, il n'autorise pas les valeurs en double.

Syntaxe

Voici la syntaxe de création d'un index unique.

CREATE UNIQUE INDEX index_name on table_name (column_name);

Exemple

L'exemple suivant crée un index UNIQUE sur la colonne Id de la table Employee.

ij> CREATE UNIQUE INDEX unique_index on Emp (Phone_Number);
0 rows inserted/updated/deleted

Une fois que vous avez créé un index unique sur une colonne, vous ne pouvez pas entrer les mêmes valeurs pour cette colonne dans une autre ligne. En bref, une colonne qui possède un index UNIQE n'autorisera pas les valeurs en double.

Insérez une ligne dans le tableau Emp comme indiqué ci-dessous

ij> INSERT INTO Emp(Name, Salary, Location, Phone_Number) VALUES ('Amit',
45000, 'Hyderabad', 9848022338);
1 row inserted/updated/deleted

Depuis que nous avons créé un index unique sur la colonne Phone_No, si vous ty pour entrer la même valeur que dans l'enregistrement précédent, il affiche une erreur.

ij> INSERT INTO Emp(Name, Salary, Location, Phone_Number) VALUES ('Sumit',
35000, 'Chennai', 9848022338);
ERROR 23505: The statement was aborted because it would have caused a duplicate
key value in a unique or primary key constraint or unique index identified by
'UNIQUE_INDEX' defined on 'EMP'.

Créer un index COMPOSITE

Vous pouvez créer un seul index sur deux lignes et il est appelé Index composite.

Syntaxe

Voici la syntaxe de l'index composite.

CREATE INDEX index_name on table_name (column_name1, column_name2);

Exemple

L'index suivant crée un index composite sur les colonnes Nom et Emplacement.

ij> CREATE INDEX composite_index on Emp (Name, Location);
0 rows inserted/updated/deleted

Affichage des index

La requête SHOW INDEXES affiche la liste des index sur une table.

Syntaxe

Voici la syntaxe de l'instruction SHOW INDEXES -

SHOW INDEXES FROM table_name;

Exemple

L'exemple suivant, i affiche les index sur la table Employés.

ij> SHOW INDEXES FROM Emp;

Cela produit le résultat suivant.

ij> SHOW INDEXES FROM Emp;
TABLE_NAME |COLUMN_NAME |NON_U&|TYPE|ASC&|CARDINA&|PAGES
----------------------------------------------------------------------------
EMP |PHONE_NUMBER |false |3 |A |NULL |NULL
EMP |NAME |true |3 |A |NULL |NULL
EMP |LOCATION |true |3 |A |NULL |NULL
EMP |SALARY |true |3 |A |NULL |NULL
4 rows selected

Suppression d'index

L'instruction Drop Index supprime / supprime l'index donné sur une colonne.

Syntaxe

Voici la syntaxe de l'instruction DROP INDEX.

DROP INDEX index_name;

Exemple

L'exemple suivant supprime un index nommé composite_index et unique_index créé ci-dessus.

ij> DROP INDEX composite_index;
0 rows inserted/updated/deleted
ij>Drop INDEX unique_index;
0 rows inserted/updated/deleted

Maintenant, si vous vérifiez la liste des index, vous pouvez voir l'index sur une colonne puisque nous avons supprimé le reste.

ij> SHOW INDEXES FROM Emp;
TABLE_NAME |COLUMN_NAME |NON_U&|TYPE|ASC&|CARDINA&|PAGES
----------------------------------------------------------------------------
EMP |SALARY |true |3 |A |NULL |NULL
1 row selected

Gestion des index à l'aide du programme JDBC

Le programme JDBC suivant montre comment créer des index de dépôt sur une colonne d'une table.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class IndexesExample {
   public static void main(String args[]) throws Exception {

      //Registering the driver
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
      //Getting the Connection object
      String URL = "jdbc:derby:MYDATABASE;create=true";
      Connection conn = DriverManager.getConnection(URL);

      //Creating the Statement object
      Statement stmt = conn.createStatement();

      //Creating the Emp table
      String createQuery = "CREATE TABLE Emp( "
         + "Id INT NOT NULL GENERATED ALWAYS AS IDENTITY, "
         + "Name VARCHAR(255), "
         + "Salary INT NOT NULL, "
         + "Location VARCHAR(255), "
         + "Phone_Number BIGINT )";
      stmt.execute(createQuery);
      System.out.println("Table created");
      System.out.println(" ");

      //Creating an Index on the column Salary
      stmt.execute("CREATE INDEX example_index on Emp (Salary)");
      System.out.println("Index example_index inserted");
      System.out.println(" ");

      //Creating an Unique index on the column Phone_Number
      stmt.execute("CREATE UNIQUE INDEX unique_index on Emp (Phone_Number)");
      System.out.println("Index unique_index inserted");
      System.out.println(" ");

      //Creating a Composite Index on the columns Name and Location
      stmt.execute("CREATE INDEX composite_index on Emp (Name, Location)");
      System.out.println("Index composite_index inserted");
      System.out.println(" ");

      //listing all the indexes
      System.out.println("Listing all the columns with indexes");

      //Dropping indexes
      System.out.println("Dropping indexes unique_index and, composite_index ");
      stmt.execute("Drop INDEX unique_index");
      stmt.execute("DROP INDEX composite_index");
   }
}

Production

Lors de l'exécution, cela génère le résultat suivant

Table created
Index example_index inserted

Index unique_index inserted

Index composite_index inserted

Listing all the columns with indexes
Dropping indexes unique_index and, composite_index