0Pricing
Coding Interview Prep · Ders

Bileşik Dizin Sütunlarının Sırası

En soldaki ön ek kuralı ve bir iş yükü için doğru sütun sırasını seçme.

Bileşik Dizin Sütunlarının Sırası, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.

Bileşik Dizin Sorusu

Tek sütunlu bir dizini açıklayabildiğinizde görüşmeciler çıtayı yükseltir: “Müşteri kimliği ve sipariş tarihi üzerinde birlikte sorgu çalıştırıyorsunuz. Bunlar için nasıl dizin oluşturursunuz?” Beklenen yanıt, bileşik (çok sütunlu) dizin önermek ve sütun sırasını gerekçelendirmektir.

Bu ders, karşılaşacağınız bileşik dizin sorularının neredeyse tamamını açıklayan tek fikri, en soldaki önek kuralını öğretir.

Bileşik Dizin Nedir

Bileşik dizin, birkaç sütunu sıralı bir demet olarak dizinler. Girdiler önce ilk sütuna, eşit değerlerde ikinci sütuna ve bu şekilde devam eder; tıpkı soyadına, ardından ada göre sıralanmış bir telefon rehberi gibi.

Sıralama önceliği bildirdiğiniz sütun sırasını izlediği için sütunların sırası son derece önemlidir.

CREATE INDEX idx_orders_cust_date
  ON orders (customer_id, order_date);

En Soldaki Önek Kuralı

Temel kural şudur: (A, B, C) üzerindeki bileşik dizin, bu sütunların en soldaki öneki üzerinde filtreleme yapan sorgular için kullanılabilir:

  • Yalnızca A, evet
  • A, B, evet
  • A, B, C, evet
  • Yalnızca B, hayır
  • B, C, hayır

Telefon rehberini düşünün: “Smith” soyadlı herkesi bulabilirsiniz; ancak kitap bu şekilde sıralanmadığı için soyadından bağımsız olarak ilk adı “John” olan herkesi verimli biçimde bulamazsınız.

Uygulamalı Örnek: Önek Eşleşmeleri

(customer_id, order_date) üzerindeki dizin, başta customer_id bulunduğu için aşağıdaki sorgular tarafından kullanılabilir:

İlki yalnızca ilk sütunu kullanır. İkincisi ise her iki sütunu kullanır; önce customer_id değerine göre alanı daraltır, ardından bu müşterinin tarih sırasına göre düzenlenmiş girdileri içinde arama yapar.

-- Uses the index (leading column)
SELECT * FROM orders WHERE customer_id = 42;

-- Uses the index fully (both columns, in order)
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Uygulamalı Örnek: Önek Eşleşmiyor

Bu sorgu yalnızca ikinci sütunda filtreleme yapar. Bu nedenle (customer_id, order_date) üzerindeki dizin genellikle aramayı yönlendiremez; çünkü girdiler genel olarak order_date değerine göre sıralanmamıştır.

Yalnızca order_date üzerinde filtreleme yapmak yaygın bir kullanım biçimiyse, ilk sırada order_date bulunan ayrı bir dizine ihtiyacınız vardır.

-- Does NOT use idx_orders_cust_date efficiently
SELECT * FROM orders
WHERE order_date >= '2026-01-01';

-- Fix: an index that leads with order_date
CREATE INDEX idx_orders_date ON orders (order_date);

Aralıktan Önce Eşitlik

Kıdemli düzeyde bir ayrıntı şudur: eşitlik (=) ile kullanılan sütunları aralık (<, >, BETWEEN) ile kullanılan sütunların önüne koyun. Dizin bir aralık sütununa ulaştığında, aramayı daraltmak için sonraki sütunları artık kullanamaz.

status = 'paid' AND created_at > ? gibi bir sorgu için doğru sıra (status, created_at) biçimidir; tersi değil.

-- Query: WHERE status = 'paid' AND created_at > '2026-01-01'
-- Good: equality column first
CREATE INDEX idx_orders_status_created
  ON orders (status, created_at);

İlk Sütunu Seçme

Hangi sütunun ilk sırada olacağını nasıl seçersiniz? Görüşmeciler, iş yüküne dayalı bir yanıt bekler:

  • Özellikle eşitlik filtresi olarak en çok sorguda yer alan sütunu ilk sıraya koyun.
  • Yüksek seçiciliğe (çok sayıda farklı değere) sahip bir sütunu tercih edin; böylece ilk adım en fazla satırı eler.
  • ORDER BY gereksinimlerini göz önünde bulundurun: Dizin sırasını eşleştirmek bir sıralamayı önleyebilir.

İlk sıradaki sütun, gerçek sorgu dağılımınız genelinde en yoğun filtreleme işini yapan sütundur.

Bileşik Dizin Sıralamaya Yardımcı Olur

Bileşik dizin, bir en soldaki önek üzerindeki ORDER BY işlemini de karşılar. Girdiler önce customer_id, ardından order_date değerine göre sıralandığından, tek bir müşterinin siparişlerini tarihe göre sıralayan bir sorgu neredeyse ek maliyetsizdir; ayrıca bir sıralama gerekmez.

-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;

Gereksiz Dizinler Oluşturmayın

Adaylar çoğu zaman gereğinden fazla dizin oluşturur. Zaten (customer_id, order_date) dizininiz varsa, yalnızca (customer_id) üzerinde ayrı bir dizin oluşturmak genellikle gereksizdir; bileşik dizin, ilk sütunla yapılan sorguları zaten kapsar.

Her ek dizin depolama maliyeti getirir ve yazma işlemlerini yavaşlatır. Bu nedenle amaç, her sütun için bir dizin oluşturmak değil, sorgu kalıplarınızı kapsayan en küçük dizin kümesini bulmaktır.

EXPLAIN ile Kanıtlama

Her zaman olduğu gibi planlayıcının seçimini doğrulayın. Bileşik bir dizin oluşturduktan sonra EXPLAIN çalıştırın ve bunun bir Index Scan olarak görünüp görünmediğini, ayrıca kaç satır tahmin ettiğini kontrol edin.

Önekle eşleşmeyen bir sorgu ardışık taramaya geri dönüyorsa bu, sütun sırasının iş yüküne uymadığını gösteren kanıtınızdır ve görüşmeciye tam olarak açıklayacağınız nokta budur.

EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Görüşmede Nasıl İfade Edilir

Özlü bir özet:

“Bileşik dizin, sütunlarına soldan sağa göre sıralanır; bu nedenle sütunların en soldaki öneklerinin tümüne hizmet edebilir, ancak sondaki bir alt kümeye hizmet edemez. İlk sıraya en fazla filtreleme yapan ve seçiciliği yüksek sütunu koyarım, eşitlik koşullarını aralık koşullarının önüne yerleştiririm, mümkün olduğunda ORDER BY ile eşleştiririm ve ardından EXPLAIN ile doğrularım.”

Hızlı Kontrol

En soldaki önek kuralını uygulayın.

Özet: Bileşik İndeks Sıralaması

Temel çıkarımlar:

  • Bileşik indeks soldan sağa sıralanır; sütunlarının yalnızca en soldaki önekine hizmet eder.
  • En çok sorgulanan ve yüksek seçiciliğe sahip sütunla başlayın.
  • Eşitlik sütunlarını aralık sütunlarından önce yerleştirin.
  • Eşleşen bir önek, sıralama yapmadan ORDER BY gereksinimini de karşılayabilir.
  • Bileşik indeks tarafından zaten kapsanan gereksiz tek sütunlu indekslerden kaçının ve EXPLAIN ile doğrulayın.

Sırada: yığın getirmesini tamamen ortadan kaldıran kapsayıcı indeksler var.

Sıkça Sorulan Sorular

“Bileşik Dizin Sütunlarının Sırası” dersi ücretsiz mi?

Evet — “Bileşik Dizin Sütunlarının Sırası” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.

“Bileşik Dizin Sütunlarının Sırası” dersinde ne öğreneceğim?

En soldaki ön ek kuralı ve bir iş yükü için doğru sütun sırasını seçme. Coding Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Coding Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Bileşik Dizin Sütunlarının Sırası” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Coding Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. B-Ağacı Dizinleri ve Faydaları
  2. Bileşik Dizin Sütunlarının Sırası
  3. Kapsayıcı Dizinler ve Yalnızca Dizin Taramaları
  4. Dizinler Ne Zaman Zararlıdır: Yazmalar ve Seçicilik
← Coding Interview Prep Sayfasına Dön