81 / 100

DROP INDEX

Indeksni o'chirish

Ushbu qo'llanmada PostgreSQLda ma'lumotlar bazasidan mavjud indeksni o'chirish uchun DROP INDEX buyrug'idan qanday foydalanishni o'rganasiz.

PostgreSQL DROP INDEX buyrug'iga kirish

Ortiqcha, foydalanilmayotgan yoki noto'g'ri loyihalashtirilgan indekslar ma'lumot kiritish (INSERT), o'zgartirish (UPDATE) va o'chirish (DELETE) amallarini sekinlashtiradi hamda diskda keraksiz joy egallaydi. Bunday indekslarni DROP INDEX buyrug'i orqali o'chirib tashlash mumkin.

DROP INDEX buyrug'ining asosiy sintaksisi:

query.sql
DROP INDEX [CONCURRENTLY] [IF EXISTS] index_name
[CASCADE | RESTRICT];

Sintaksis tushuntirishi:

  • index_name — o'chirilishi kerak bo'lgan indeks nomi.
  • CONCURRENTLY — jonli (production) tizimlar uchun juda muhim parametr. Oddiy DROP INDEX jadvalni qulflaydi (lock) va boshqa so'rovlarni to'xtatib qo'yishi mumkin. CONCURRENTLY opsiyasi jadvalni qulflamasdan, boshqa amallar (SELECT, INSERT, UPDATE) bajarilishiga xalaqit bermagan holda indeksni xavfsiz o'chiradi.
  • IF EXISTS — agar indeks mavjud bo'lmasa, xatolik chiqarmasdan ogohlantirish beradi.
  • CASCADE — ushbu indeksga bog'liq ob'ektlarni ham birga o'chiradi.
  • RESTRICT — agar indeksga bog'liq boshqa ob'ektlar bo'lsa, o'chirishni rad etadi (sukut bo'yicha).

DROP INDEX amaliy misoli

Avvalo, sinov uchun jadval va indeks yaratamiz:

query.sql
DROP TABLE IF EXISTS products CASCADE;

CREATE TABLE products (
    product_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    safety_stock INT NOT NULL DEFAULT 0
);

-- Indeks yaratamiz
CREATE INDEX products_safety_stock_idx
ON products(safety_stock);

Indeks mavjudligini tekshiramiz:

query.sql
SELECT indexname FROM pg_indexes WHERE tablename = 'products';

Natija:

matn
        indexname         
--------------------------
 products_pkey
 products_safety_stock_idx

Endi yaratilgan indeksni o'chiramiz:

query.sql
DROP INDEX products_safety_stock_idx;

Agar indeks mavjudligiga ishonchingiz komil bo'lmasa, IF EXISTS qo'shiladi:

query.sql
DROP INDEX IF EXISTS products_safety_stock_idx;

Katta va faol foydalanilayotgan jadvallarda bloklanishlarning oldini olish uchun:

query.sql
DROP INDEX CONCURRENTLY IF EXISTS products_safety_stock_idx;

[!NOTE] CONCURRENTLY opsiyasi tranzaksiya bloklari (BEGIN ... COMMIT) ichida ishlatilmaydi.

Xulosa

  • DROP INDEX buyrug'i ma'lumotlar bazasidan keraksiz indekslarni o'chirib, yozish amallari tezligini va disk hajmini tejashga yordam beradi.
  • IF EXISTS xatoliklarni oldini oladi.
  • CONCURRENTLY opsiyasi yuklama ostidagi tizimlarda jadvalni bloklamasdan indeksni o'chirish imkonini beradi.