Apache Derby - Indici Derby

Un indice in una tabella non è altro che un puntatore ai suoi dati. Vengono utilizzati per velocizzare il recupero dei dati da una tabella.

Se usiamo gli indici, le istruzioni INSERT e UPDATE vengono eseguite in una fase più lenta. Mentre SELECT e WHERE vengono eseguiti con in minor tempo.

Creazione di un indice

L'istruzione CREATE INDEX viene utilizzata per creare un nuovo indice in una tabella nel database Derby.

Sintassi

Di seguito è riportata la sintassi dell'istruzione CREATE INDEX:

CTREATE INDEX index_name on table_name (column_name);

Esempio

Supponiamo di aver creato una tabella denominata Employees in Apache Derby come mostrato di seguito.

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

La seguente istruzione SQL crea un indice nella colonna denominata Salary nella tabella Employees.

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

Creazione di un indice UNICO

In Apache Derby, gli indici UNIQUE vengono utilizzati per l'integrazione dei dati. Dopo aver creato un indice UNICO su una colonna di una tabella, non consente valori duplicati.

Sintassi

Di seguito è riportata la sintassi per creare un indice univoco.

CREATE UNIQUE INDEX index_name on table_name (column_name);

Esempio

L'esempio seguente crea un indice UNICO sulla colonna Id della tabella Employee.

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

Dopo aver creato un indice univoco su una colonna, non è possibile immettere gli stessi valori per quella colonna in un'altra riga. In breve, una colonna che ha un indice UNIQE non consentirà valori duplicati.

Inserisci una riga nella tabella Emp come mostrato di seguito

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

Dato che abbiamo creato un indice univoco nella colonna Phone_No, se vuoi inserire lo stesso valore del record precedente, viene visualizzato un errore.

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'.

Creazione di un indice COMPOSITO

Puoi creare un singolo indice su due righe e si chiama Indice composito.

Sintassi

Di seguito è riportata la sintassi dell'indice composito.

CREATE INDEX index_name on table_name (column_name1, column_name2);

Esempio

L'indice seguente crea un indice composto sulle colonne Nome e Posizione.

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

Visualizzazione degli indici

La query SHOW INDEXES visualizza l'elenco degli indici su una tabella.

Sintassi

Di seguito è riportata la sintassi dell'istruzione SHOW INDEXES:

SHOW INDEXES FROM table_name;

Esempio

Nell'esempio seguente, i visualizza gli indici nella tabella Employees.

ij> SHOW INDEXES FROM Emp;

Questo produce il seguente risultato.

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

Eliminazione degli indici

L'istruzione Drop Index elimina / elimina l'indice specificato su una colonna.

Sintassi

Di seguito è riportata la sintassi dell'istruzione DROP INDEX.

DROP INDEX index_name;

Esempio

L'esempio seguente rilascia un indice denominato composite_index e unique_index creato sopra.

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

Ora, se verifichi l'elenco degli indici, puoi vedere l'indice su una colonna poiché abbiamo eliminato i rimanenti.

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

Gestione degli indici utilizzando il programma JDBC

Il seguente programma JDBC mostra come creare indici di rilascio su una colonna in una tabella.

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");
   }
}

Produzione

All'esecuzione, questo genera il seguente risultato

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