Indeks yaratish
Ushbu qo'llanmada PostgreSQLda jadvalning bitta yoki bir nechta ustunlari bo'yicha indeks yaratish uchun CREATE INDEX buyrug'idan qanday foydalanishni o'rganasiz.
CREATE INDEX buyrug'i ma'lumotlar bazasi jadvali ustunlarida qidiruvni tezlashtirish uchun yangi indeks yaratadi.
CREATE INDEX buyrug'ining asosiy sintaksisi:
CREATE INDEX [IF NOT EXISTS] [index_name]
ON tablename (column1, column2, ...);
Sintaksis tushuntirishi:
index_name — yaratilayotgan indeksning nomi (ixtiyoriy). Agar nom ko'rsatilmasa, PostgreSQL avtomatik tarzda nom generatsiya qiladi.IF NOT EXISTS — agar bunday nomli indeks mavjud bo'lsa, xatolik chiqarmasdan ogohlantirish berish uchun ishlatiladi.tablename — indeks yaratilayotgan jadval nomi.(column1, column2, ...) — indeks tarkibiga kiritiladigan ustunlar ro'yxati.Agar siz indeks nomini o'zingiz aniq ko'rsatmasangiz, PostgreSQL quyidagi andoza bo'yicha avtomatik nom beradi:
tablename_column_idx
tablename_column1_column2_idx
[!NOTE] Agar siz bir xil ustunlar to'plami uchun nom ko'rsatmasdan qayta-qayta
CREATE INDEXqilsangiz, PostgreSQL har gal yangi nomli ortiqcha (dublikat) indekslar yaratishi mumkin. Shuning uchun indekslarga aniq nom berish yaxshi amaliyot hisoblanadi.
Misollarni bajarish uchun quyidagi transactions jadvalini yaratib olamiz:
DROP TABLE IF EXISTS transactions;
CREATE TABLE transactions (
transaction_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
customer_id INT NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
type VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO transactions (customer_id, amount, type) VALUES
(1, 150.00, 'purchase'),
(2, 200.00, 'refund'),
(1, 50.00, 'purchase'),
(3, 400.00, 'transfer');
transactions jadvalidagi type ustuni bo'yicha indeks yaratamiz:
CREATE INDEX ON transactions(type);
Ushbu buyruq transactions_type_idx nomli yangi indeks yaratadi.
Jadvaldagi barcha indekslarni ko'rish uchun pg_indexes tizim katalogidan foydalanish mumkin:
SELECT
indexname,
indexdef
FROM
pg_indexes
WHERE
tablename = 'transactions';
Natija:
indexname | indexdef
-----------------------+-------------------------------------------------------------------------------------------
transactions_pkey | CREATE UNIQUE INDEX transactions_pkey ON public.transactions USING btree (transaction_id)
transactions_type_idx | CREATE INDEX transactions_type_idx ON public.transactions USING btree (type)
Bu yerda:
transactions_pkey — birlamchi kalit (PRIMARY KEY) yaratilganda PostgreSQL tomonidan avtomatik yaratilgan noyob indeks.transactions_type_idx — biz yaratgan indeks.Ko'pincha so'rovlar bir nechta ustunlar kombinatsiyasi bo'yicha filtrlanadi. Masalan, bir vaqtning o'zida customer_id va type bo'yicha:
CREATE INDEX idx_transactions_customer_type
ON transactions(customer_id, type);
Agar nom ko'rsatmasak:
CREATE INDEX ON transactions(customer_id, type);
PostgreSQL unga transactions_customer_id_type_idx deb nom beradi.
Bunday tarkibiy indeks quyidagi holatlarda samarali ishlaydi:
customer_id, ham type bo'yicha qidirilganda: WHERE customer_id = 1 AND type = 'purchase'WHERE customer_id = 1CREATE INDEX buyrug'i jadval ustunlarida qidiruv va filtrlashni tezlashtirish uchun indeks yaratadi.jadval_ustun_idx ko'rinishida avtomatik nomlaydi.WHERE shartlarida katta samaradorlik beradi.