Apache Derby - Derbi Dizinleri
Bir tablodaki bir indeks, verilerine göstericiden başka bir şey değildir. Bunlar, bir tablodan veri alımını hızlandırmak için kullanılır.
İndeksleri kullanırsak, INSERT ve UPDATE komutları daha yavaş bir aşamada çalıştırılır. Oysa SELECT ve WHERE daha kısa sürede çalıştırılır.
Bir Dizin Oluşturma
CREATE INDEX deyimi, Derby veritabanındaki bir tabloda yeni bir Dizin oluşturmak için kullanılır.
Sözdizimi
CREATE INDEX ifadesinin sözdizimi aşağıdadır -
CTREATE INDEX index_name on table_name (column_name);
Misal
Aşağıda gösterildiği gibi Apache Derby'de Çalışanlar adlı bir tablo oluşturduğumuzu varsayalım.
CREATE TABLE Emp ( Id INT NOT NULL GENERATED ALWAYS AS IDENTITY,
Name VARCHAR(255),
Salary INT NOT NULL,
Location VARCHAR(255),
Phone_Number BIGINT
);
Aşağıdaki SQL deyimi, Çalışanlar tablosundaki Salary adlı sütunda bir dizin oluşturur.
ij> CREATE INDEX example_index on Emp (Salary);
0 rows inserted/updated/deleted
EŞSİZ bir dizin oluşturma
Apache Derby'de veri entegrasyonu için UNIQUE dizinler kullanılır. Tablodaki bir sütunda UNIQUE indeks oluşturduğunuzda, yinelenen değerlere izin vermez.
Sözdizimi
Aşağıda benzersiz bir dizin oluşturmanın sözdizimi verilmiştir.
CREATE UNIQUE INDEX index_name on table_name (column_name);
Misal
Aşağıdaki örnek, Employee tablosunun sütun Id'sinde bir UNIQUE indeksi oluşturur.
ij> CREATE UNIQUE INDEX unique_index on Emp (Phone_Number);
0 rows inserted/updated/deleted
Bir sütunda benzersiz bir dizin oluşturduğunuzda, o sütun için başka bir satıra aynı değerleri giremezsiniz. Kısacası, UNIQE indeksi olan bir sütun, yinelenen değerlere izin vermeyecektir.
Emp tablosuna aşağıda gösterildiği gibi bir satır ekleyin
ij> INSERT INTO Emp(Name, Salary, Location, Phone_Number) VALUES ('Amit',
45000, 'Hyderabad', 9848022338);
1 row inserted/updated/deleted
Telefon_Numarası sütununda benzersiz bir dizin oluşturduğumuz için, önceki kayıttaki ile aynı değeri girerseniz, bir hata gösterir.
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'.
COMPOSITE indeksi oluşturma
İki satırda tek bir dizin oluşturabilirsiniz ve buna Bileşik dizin adı verilir.
Sözdizimi
Aşağıda, bileşik dizinin sözdizimi verilmiştir.
CREATE INDEX index_name on table_name (column_name1, column_name2);
Misal
Aşağıdaki dizin, Ad ve Konum sütunlarında bileşik bir dizin oluşturur.
ij> CREATE INDEX composite_index on Emp (Name, Location);
0 rows inserted/updated/deleted
Dizinlerin Görüntülenmesi
DİZİNLERİ GÖSTER sorgusu, bir tablodaki dizinlerin listesini görüntüler.
Sözdizimi
SHOW INDEXES ifadesinin sözdizimi aşağıdadır -
SHOW INDEXES FROM table_name;
Misal
Aşağıdaki örnek, indeksleri Çalışanlar tablosunda görüntüler.
ij> SHOW INDEXES FROM Emp;
Bu, aşağıdaki sonucu verir.
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
Dizinleri düşürme
Drop Index deyimi, belirtilen dizini bir sütunda siler / bırakır.
Sözdizimi
DROP INDEX ifadesinin sözdizimi aşağıdadır.
DROP INDEX index_name;
Misal
Aşağıdaki örnek, yukarıda oluşturulan composite_index ve unique_index adlı bir dizini bırakır.
ij> DROP INDEX composite_index;
0 rows inserted/updated/deleted
ij>Drop INDEX unique_index;
0 rows inserted/updated/deleted
Şimdi, dizin listesini doğrularsanız, kalanını sildiğimiz için bir sütunda dizini görebilirsiniz.
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
Dizinleri JDBC programını kullanarak işleme
Aşağıdaki JDBC programı, bir tablodaki bir sütunda bırakma dizinlerinin nasıl oluşturulacağını gösterir.
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");
}
}
Çıktı
Yürütüldüğünde, bu aşağıdaki sonucu verir
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