MySQL Dizin Eğitimi – Oluştur, Ekle ve Bırak

Endeks nedir?

Dizinler MySQL Verileri düzenli bir şekilde sıralayın. Verileri filtrelemek için kullanılacak sütun(lar) üzerinde oluşturulurlar. Dizini alfabetik olarak sıralanmış bir liste olarak düşünün. Alfabetik sıraya göre sıralanmış adları aramak, sıralanmamış adlara göre daha kolaydır.

Sık sık güncellenen tablolarda dizin kullanılması performansın düşmesine neden olabilir. Bunun nedeni ise MySQL Tabloya her veri eklendiğinde veya güncellendiğinde yeni bir dizin bloğu oluşturur. Genel olarak verileri sık sık değişmeyen ancak seçilmiş arama sorgularında çok kullanılan tablolarda indeksler kullanılmalıdır.

Dizin ne işe yarar?

Kimse yavaş sistemleri sevmez. Yüksek sistem performansı hemen hemen tüm veritabanı sistemlerinde büyük önem taşımaktadır. Çoğu işletme, veri alımının ve manipülasyonunun daha hızlı olabilmesi için donanıma büyük yatırım yapar. Ancak bir işletmenin yapabileceği donanım yatırımlarının sınırı vardır. Veritabanınızı optimize etmek daha ucuz ve daha iyi bir çözümdür.

MySQL indeks

Yanıt süresindeki yavaşlık genellikle kayıtların veritabanı tablolarında rastgele saklanmasından kaynaklanmaktadır. Arama sorgularının, istenen verileri bulmak için rastgele saklanan tüm kayıtlar arasında birbiri ardına döngü yapması gerekir. Bu, büyük tablolardan veri alma söz konusu olduğunda veritabanlarının performansının düşmesine neden olur. Bu nedenle, aramayı kolaylaştırmak için verileri sıralayan Dizinler kullanılır.

Sözdizimi: Dizin Oluştur

İndeksler 2 şekilde tanımlanabilir

  1. Tablo oluşturulurken
  2. Tablo oluşturulduktan sonra

Örnek:

Myflixdb'miz için veritabanında tam adla çok sayıda arama yapılmasını bekliyoruz.

“full_names” sütununu yeni bir “members_indexed” tablosundaki Index'e ekleyeceğiz.

Aşağıda gösterilen komut dosyası bunu başarmamıza yardımcı olur.

CREATE TABLE `members_indexed` (
  `membership_number` int(11) NOT NULL AUTO_INCREMENT,
  `full_names` varchar(150) DEFAULT NULL,
  `gender` varchar(6) DEFAULT NULL,
  `date_of_birth` date DEFAULT NULL,
  `physical_address` varchar(255) DEFAULT NULL,
  `postal_address` varchar(255) DEFAULT NULL,
  `contact_number` varchar(75) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`membership_number`),INDEX(full_names)
) ENGINE=InnoDB;

Yukarıdaki SQL betiğini yürütün MySQL “myflixdb”ye karşı çalışma tezgahı.

MySQL Dizin Oluştur

Myflixdb'nin yenilenmesi, üyeler_indexed adlı yeni oluşturulan tabloyu gösterir.

"Not" Members_indexed tablosunun indeksler düğümünde “tam_adlar” var.

Üye tabanı genişledikçe ve kayıt sayısı arttıkça, Members_indexed tablosunda WHERE ve ORDER BY deyimlerini kullanan arama sorguları, dizin tanımlanmamış üyeler tablosunda yapılan arama sorgularına kıyasla çok daha hızlı olacaktır.

Dizin temel söz dizimini ekle

Yukarıdaki örnek, veritabanı tablosunu tanımlarken dizini oluşturdu. Zaten tanımlanmış bir tablomuz olduğunu ve bu tablodaki arama sorgularının çok yavaş olduğunu varsayalım. Sonuçları döndürmeleri çok uzun sürüyor. Sorunu inceledikten sonra WHERE deyiminde en sık kullanılan sütun üzerinde INDEX oluşturarak sistem performansını büyük ölçüde artırabileceğimizi keşfediyoruz.

Dizin eklemek için aşağıdaki sorguyu kullanabiliriz

CREATE INDEX id_index ON table_name(column_name);

Filmler tablosunda yapılan arama sorgularının çok yavaş olduğunu ve sorguları hızlandırmak için "film adı" üzerinde bir indeks kullanmak istediğimizi varsayalım. Bunu başarmak için aşağıdaki betiği kullanabiliriz.

CREATE INDEX `title_index` ON `movies`(`title`);

Yukarıdaki sorgunun çalıştırılması, filmler tablosundaki başlık alanında bir dizin oluşturur.

Bu, filmler tablosunda "başlık" kullanılarak yapılan tüm arama sorgularının daha hızlı olacağı anlamına gelir.

Bununla birlikte, filmler tablosundaki diğer alanlardaki arama sorguları, dizine eklenen alanı temel alan sorgularla karşılaştırıldığında yine de daha yavaş olacaktır.

Not: Veritabanı arama motorunuz için kullanmayı düşündüğünüz alanlara bağlı olarak gerekirse birden fazla sütunda dizinler oluşturabilirsiniz.

Belirli bir tabloda tanımlanan indeksleri görüntülemek istiyorsanız, bunu yapmak için aşağıdaki betiği kullanabilirsiniz.

SHOW INDEXES FROM table_name;

Şimdi myflixdb'deki filmler tablosunda tanımlanan tüm indekslere bir göz atalım.

SHOW INDEXES FROM `movies`;

Yukarıdaki betiğin çalıştırılması MySQL tezgâh myflixdb'ye karşı bize oluşturulan indeksle ilgili sonuçları verir.

Not: Tablodaki birincil ve yabancı anahtarlar zaten tarafından indekslenmiştir. MySQL. Her indeksin kendine özgü bir adı vardır ve tanımlandığı sütun da gösterilir.

Sözdizimi: Bırakma dizini

Drop komutu, bir tablodaki önceden tanımlanmış dizinleri kaldırmak için kullanılır.

Sık sık güncellenen bir tabloda zaten bir dizin tanımladığınız zamanlar olabilir. UPDATE ve INSERT sorgularının performansını artırmak için böyle bir tablodaki dizinleri kaldırmak isteyebilirsiniz. Bir tabloya indeks bırakmak için kullanılan temel sözdizimi aşağıdaki gibidir.

DROP INDEX `index_id` ON `table_name`;

Şimdi pratik bir örneğe bakalım.

DROP INDEX ` full_names` ON `members_indexed`;

Yukarıdaki komutun yürütülmesi, ` full_names ` kimliğine sahip dizini Members_indexed tablosundan çıkarır.

ÖZET

  • Endeksler, performansı büyük ölçüde artırma konusunda çok güçlüdür. MySQL arama sorguları.
  • İndeksler bir tablo oluşturulurken tanımlanabilir veya tablo oluşturulduktan sonra eklenebilir.
  • Bir tablo üzerinde birden fazla sütunda indeks tanımlayabilirsiniz.
  • SHOW INDEX FROM tablo_adı, tanımlanan dizinleri bir tabloda görüntülemek için kullanılır.
  • DROP komutu belirli bir tablodaki tanımlı bir dizini kaldırmak için kullanılır.