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