Bir kapsama dizini, bir sorgu için gereken verileri tabloya erişmeden sağlayan normal bir dizindir.
Örneğin, ürün_sipariş tablosundaki belirli country_id için ülke adını optimize etmek istiyorsunuz ve bu tabloda 5.000.000 veri bulunmaktadır. Yalnızca country_id üzerinde bir dizininiz olduğunu varsayalım. O zaman sorgu ve plan aşağıdaki gibi olacaktır. Plan, erişim yöntemi için dizin araması kullanacağını belirtir. Bu, ix_product_country dizinini tarayacağı ve ardından ülkeyi almak için gerçek tabloya erişeceği anlamına gelir.
(Normal dizinli Sorgu Planı)
explain format=tree
select country
from product_order po
where country_id = 1
-> Limit: 200 row(s) (cost=109432 rows=200)
-> Index lookup on po using ix_product_country (country_id = 1)explain format=tree
select country
from product_order po
where country_id = 1
-> Limit: 200 row(s) (cost=109432 rows=200)
-> Index lookup on po using ix_product_country (country_id = 1)explain format=tree
select country
from product_order po
where country_id = 1
-> Limit: 200 row(s) (cost=109432 rows=200)
-> Index lookup on po using ix_product_country (country_id = 1)
Kapsama dizini senaryosu aşağıdaki gibi görünecektir.
(Kapsama dizinli Sorgu Planı)
create index ix_country_id_name on product_order ( country_id, country ) ;
explain format=tree
select country
from product_order po
where country_id = 1 ;
-> Limit: 200 row(s) (cost=11391 rows=200)
-> Covering index lookup on po using ix_country_id_name (country_id = 1)
create index ix_country_id_name on product_order ( country_id, country ) ;
explain format=tree
select country
from product_order po
where country_id = 1 ;
-> Limit: 200 row(s) (cost=11391 rows=200)
-> Covering index lookup on po using ix_country_id_name (country_id = 1)
create index ix_country_id_name on product_order ( country_id, country ) ;
explain format=tree
select country
from product_order po
where country_id = 1 ;
-> Limit: 200 row(s) (cost=11391 rows=200)
-> Covering index lookup on po using ix_country_id_name (country_id = 1)
Şimdi plan değişti. Plan, sorguyu döndürmek için Kapsama dizin mekanizmasını kullanacağını söylüyor. Bu, tüm verilerin dizin içinde alınacağı ve gerçek tabloya erişilmeyeceği anlamına gelir. Böylece, orijinal maliyet 109.432'den 11.391'e düşürüldü, bu da kapsama dizini ile ortalama olarak 10 kat daha hızlı olduğu anlamına gelir.
Seçim sütunlarının sayısı az olduğunda ve orijinal planda 'dizin araması' kullanılsa bile sorguyu optimize etmek istediğinizde kapsama dizinini kullanabilirsiniz.