SQL

HASH Index

 HASH در SQL با مثال

شاخص HASH نوعی شاخص خاص در SQL است که از یک تابع هش برای توزیع یکنواخت ردیف ها در بین تعداد مشخصی سطل استفاده می کند. این نوع شاخص برای مقایسه های برابری (equality comparisons) به طور موثر عمل می کند، جایی که به دنبال یک ردیف خاص در جدول هستید.

نحوه عملکرد شاخص HASH:

  1. تابع هش: تابع هش ورودی (معمولاً مقدار ستون) را دریافت می کند و آن را به یک عدد (bucket number) تبدیل می کند. این عدد نشان می دهد که ردیف مربوطه در کدام سطل از ساختار شاخص HASH قرار دارد.
  2. توزیع سطل: سطل ها آرایه ای از ساختارهای داده ای هستند که ردیف های مربوط به آنها را ذخیره می کنند. هدف از توزیع یکنواخت ردیف ها در بین سطل ها، به حداقل رساندن تعداد جستجوهای لازم برای یافتن ردیف مورد نظر است.
  3. جستجو: هنگام اجرای یک پرس و جو با استفاده از شاخص HASH، تابع هش مقدار ستون مربوطه را به یک bucket number تبدیل می کند. سپس، موتور پایگاه داده به طور مستقیم به آن سطل خاص می رود و ردیف های مربوطه را برای یافتن ردیف مورد نظر بررسی می کند.

مزایای شاخص HASH:

  • سرعت: شاخص های HASH به طور کلی برای جستجوی برابری سریعتر از سایر انواع شاخص ها مانند B-tree هستند.
  • کارایی: ساخت و نگهداری شاخص های HASH به دلیل سادگی ساختار آنها، کارآمدتر است.
  • فضا: شاخص های HASH معمولاً فضای کمتری نسبت به شاخص های B-tree اشغال می کنند.

معایب شاخص HASH:

  • غیرقابل استفاده برای جستجوی محدوده: شاخص های HASH برای جستجوی محدوده (range queries) مانند WHERE id BETWEEN 10 AND 20 کارآمد نیستند.
  • احتمال برخورد: در برخی موارد، ممکن است دو مقدار مختلف به یک bucket number یکسان تبدیل شوند. این امر به “برخورد” (collision) منجر می شود و می تواند بر عملکرد جستجو تاثیر بگذارد.
  • عدم ترتیب: شاخص های HASH ترتیب ذاتی ردیف ها را حفظ نمی کنند.

مثال:

فرض کنید جدولی به نام Customers با ستون های id, name و email داریم. می خواهیم شاخص HASH برای ستون id ایجاد کنیم.

SQL
CREATE INDEX idx_customers_id ON Customers (id) USING HASH;

حال، اگر بخواهیم ردیف مربوط به مشتری با شناسه ۱۲۳ را پیدا کنیم، می توانیم از پرس و جوی زیر استفاده کنیم:

SQL
SELECT * FROM Customers WHERE id = ۱۲۳;

در این پرس و جو، موتور پایگاه داده از شاخص HASH برای یافتن سریع ردیف مورد نظر در سطل مربوطه استفاده می کند.

نکات:

  • شاخص های HASH به طور کلی برای جدول های بزرگ با تعداد زیادی ردیف مناسب هستند.
  • اگر به طور مکرر جستجوی محدوده انجام می دهید، استفاده از شاخص B-tree به جای شاخص HASH ممکن است مناسب تر باشد.
  • قبل از ایجاد شاخص HASH، باید الگوی دسترسی به داده های خود را به دقت تجزیه و تحلیل کنید.

منابع:

 

۵/۵ ( ۱ امتیاز )
نمایش بیشتر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا