Forwarded from CodeCrafters (mahyar)
خب در ادامه پست های استفاده از ایندکس در جئداول دیتابیس قرار در این پست با Multi-Column Indexes اشنا بشیم/
ایندکسهای چندستونی (Multi-Column Indexes) برای بهبود کارایی جستجو در جداولی که به طور مکرر از چندین ستون در کوئریهای خود استفاده میکنند، بسیار مفید هستند. این نوع ایندکسها بر روی بیش از یک ستون از جدول ایجاد میشوند و میتوانند به طور همزمان ترتیب چند ستون را برای بهبود سرعت جستجو حفظ کنند.
ویژگیهای ایندکسهای چندستونی
1. ترتیب ستونها:
- ترتیب ستونهایی که در ایندکس تعریف میشوند بسیار مهم است.
- ایندکس ابتدا بر اساس ستون اول مرتب میشود و سپس در داخل هر مقدار ستون اول، بر اساس ستون دوم و به همین ترتیب ادامه مییابد.
- انتخاب ترتیب مناسب ستونها بر اساس الگوهای کوئری معمول، میتواند تاثیر زیادی بر کارایی جستجو داشته باشد.
2. بهبود کارایی:
- ایندکسهای چندستونی میتوانند کارایی کوئریهایی را که از این ستونها در شرط WHERE، ORDER BY، و GROUP BY استفاده میکنند، بهبود بخشند.
- در کوئریهایی که فقط از ستون اول ایندکس استفاده میکنند نیز میتواند بهبود کارایی ایجاد کند.
3. محدودیتها:
- ایندکسهای چندستونی میتوانند فضای بیشتری را نسبت به ایندکسهای تکستونی اشغال کنند.
- بهروزرسانیهای جداولی که دارای ایندکسهای چندستونی هستند میتوانند زمانبرتر باشند به دلیل نیاز به بروزرسانی ساختار ایندکس.
مثالها و کد
فرض کنید یک جدول به نام
ایجاد ایندکس چندستونی
در SQL، ایجاد یک ایندکس چندستونی به شکل زیر است:
این ایندکس ابتدا بر اساس
استفاده از ایندکس چندستونی در کوئریها
مثال 1: جستجو بر اساس هر دو ستون
در این کوئری، هر دو ستون
مثال 2: جستجو بر اساس ستون اول
در این کوئری، تنها ستون
مثال 3: جستجو بر اساس ستون دوم
در این کوئری، تنها ستون
بهروزرسانی و حذف ایندکس
برای حذف یک ایندکس چندستونی:
نکات مهم
1. انتخاب ستونها: ستونهایی را انتخاب کنید که در بیشتر کوئریها استفاده میشوند و ترتیب آنها را بر اساس بیشترین تاثیر بر کارایی جستجو تعیین کنید.
2. نگهداری و بهروزرسانی: با افزایش تعداد ایندکسها، عملیات نوشتن (INSERT, UPDATE, DELETE) کندتر میشود. به همین دلیل، باید توازن مناسبی بین تعداد ایندکسها و نیازهای جستجو برقرار کرد.
3. تحلیل کارایی: استفاده از ابزارهای تحلیل کارایی (مانند EXPLAIN در SQL) برای بررسی تاثیر ایندکسها بر کوئریها مفید است.
با توجه به این نکات، ایندکسهای چندستونی میتوانند به طور قابل توجهی کارایی دیتابیس شما را بهبود بخشند اگر به درستی طراحی و استفاده شوند.
#database
#postgresql
ایندکسهای چندستونی (Multi-Column Indexes) برای بهبود کارایی جستجو در جداولی که به طور مکرر از چندین ستون در کوئریهای خود استفاده میکنند، بسیار مفید هستند. این نوع ایندکسها بر روی بیش از یک ستون از جدول ایجاد میشوند و میتوانند به طور همزمان ترتیب چند ستون را برای بهبود سرعت جستجو حفظ کنند.
ویژگیهای ایندکسهای چندستونی
1. ترتیب ستونها:
- ترتیب ستونهایی که در ایندکس تعریف میشوند بسیار مهم است.
- ایندکس ابتدا بر اساس ستون اول مرتب میشود و سپس در داخل هر مقدار ستون اول، بر اساس ستون دوم و به همین ترتیب ادامه مییابد.
- انتخاب ترتیب مناسب ستونها بر اساس الگوهای کوئری معمول، میتواند تاثیر زیادی بر کارایی جستجو داشته باشد.
2. بهبود کارایی:
- ایندکسهای چندستونی میتوانند کارایی کوئریهایی را که از این ستونها در شرط WHERE، ORDER BY، و GROUP BY استفاده میکنند، بهبود بخشند.
- در کوئریهایی که فقط از ستون اول ایندکس استفاده میکنند نیز میتواند بهبود کارایی ایجاد کند.
3. محدودیتها:
- ایندکسهای چندستونی میتوانند فضای بیشتری را نسبت به ایندکسهای تکستونی اشغال کنند.
- بهروزرسانیهای جداولی که دارای ایندکسهای چندستونی هستند میتوانند زمانبرتر باشند به دلیل نیاز به بروزرسانی ساختار ایندکس.
مثالها و کد
فرض کنید یک جدول به نام
employees داریم که شامل ستونهای first_name، last_name، و department_id است و میخواهیم یک ایندکس چندستونی بر روی ستونهای last_name و department_id ایجاد کنیم.ایجاد ایندکس چندستونی
در SQL، ایجاد یک ایندکس چندستونی به شکل زیر است:
CREATE INDEX idx_lastname_department ON employees (last_name, department_id);
این ایندکس ابتدا بر اساس
last_name و سپس بر اساس department_id مرتب میشود.استفاده از ایندکس چندستونی در کوئریها
مثال 1: جستجو بر اساس هر دو ستون
SELECT * FROM employees WHERE last_name = 'Doe' AND department_id = 5;
در این کوئری، هر دو ستون
last_name و department_id استفاده شدهاند، بنابراین ایندکس idx_lastname_department به طور کامل بهرهبرداری میشود و کارایی جستجو افزایش مییابد.مثال 2: جستجو بر اساس ستون اول
SELECT * FROM employees WHERE last_name = 'Doe';
در این کوئری، تنها ستون
last_name استفاده شده است که ستون اول ایندکس است. بنابراین ایندکس هنوز هم میتواند کارایی جستجو را بهبود بخشد.مثال 3: جستجو بر اساس ستون دوم
SELECT * FROM employees WHERE department_id = 5;
در این کوئری، تنها ستون
department_id استفاده شده است که ستون دوم ایندکس است. این کوئری نمیتواند از ایندکس idx_lastname_department بهرهبرداری کند و به احتمال زیاد از اسکن کامل جدول استفاده خواهد کرد.بهروزرسانی و حذف ایندکس
برای حذف یک ایندکس چندستونی:
DROP INDEX idx_lastname_department ON employees;
نکات مهم
1. انتخاب ستونها: ستونهایی را انتخاب کنید که در بیشتر کوئریها استفاده میشوند و ترتیب آنها را بر اساس بیشترین تاثیر بر کارایی جستجو تعیین کنید.
2. نگهداری و بهروزرسانی: با افزایش تعداد ایندکسها، عملیات نوشتن (INSERT, UPDATE, DELETE) کندتر میشود. به همین دلیل، باید توازن مناسبی بین تعداد ایندکسها و نیازهای جستجو برقرار کرد.
3. تحلیل کارایی: استفاده از ابزارهای تحلیل کارایی (مانند EXPLAIN در SQL) برای بررسی تاثیر ایندکسها بر کوئریها مفید است.
با توجه به این نکات، ایندکسهای چندستونی میتوانند به طور قابل توجهی کارایی دیتابیس شما را بهبود بخشند اگر به درستی طراحی و استفاده شوند.
#database
#postgresql
👍3
در دیتابیس مفهومه ACID چیه؟
شماره یک ( 🅰️ - Atomicity):
به این معناست که یک transaction (عملیات در دیتابیس) یا کامل انجام میشه یا اصلاً انجام نمیشه.
اگه در طول اجرای transaction خطایی رخ بده، تمام تغییرات انجامشده در دیتابیس باید لغو بشه (rollback) تا دیتابیس در وضعیت اولیه باقی بمونه.
📌 مثلا؟؟
فرض کنین شما در حال انتقال پول از حساب بانکیتون به حساب شخص دیگه ای هستین. اگه فرایند انتقال بطور کامل انجام بشه (یعنی پول از حساب شما کم شده و به حساب اون شخص اضافه بشه)، تراکنش موفقیتآمیزه.✅️
اما اگه وسطه عملیات مشکلی پیش بیاد (مثلاً اتصال اینترنت قطع بشه)، هیچکدوم از این تغییرات نباید در دیتابیس باقی بمونه. یعنی یا همه عملیاتها باید انجام بشن، یا هیچکدوم نباید انجام بشن.
#Database
#ACID
#Atomicity
@GoldenCodeir
شماره یک ( 🅰️ - Atomicity):
به این معناست که یک transaction (عملیات در دیتابیس) یا کامل انجام میشه یا اصلاً انجام نمیشه.
اگه در طول اجرای transaction خطایی رخ بده، تمام تغییرات انجامشده در دیتابیس باید لغو بشه (rollback) تا دیتابیس در وضعیت اولیه باقی بمونه.
📌 مثلا؟؟
فرض کنین شما در حال انتقال پول از حساب بانکیتون به حساب شخص دیگه ای هستین. اگه فرایند انتقال بطور کامل انجام بشه (یعنی پول از حساب شما کم شده و به حساب اون شخص اضافه بشه)، تراکنش موفقیتآمیزه.✅️
اما اگه وسطه عملیات مشکلی پیش بیاد (مثلاً اتصال اینترنت قطع بشه)، هیچکدوم از این تغییرات نباید در دیتابیس باقی بمونه. یعنی یا همه عملیاتها باید انجام بشن، یا هیچکدوم نباید انجام بشن.
#Database
#ACID
#Atomicity
@GoldenCodeir
👍13❤4🗿2
Golden Code
در دیتابیس مفهومه ACID چیه؟ شماره یک ( 🅰️ - Atomicity): به این معناست که یک transaction (عملیات در دیتابیس) یا کامل انجام میشه یا اصلاً انجام نمیشه. اگه در طول اجرای transaction خطایی رخ بده، تمام تغییرات انجامشده در دیتابیس باید لغو بشه (rollback) تا…
خب حالا بریم سراغ C یا همون Consistency(سازگاری) در ACID:
ویژگی Consistency در دیتابیس یعنی بعد از انجام هر transaction، دیتاهامون باید همیشه صحیح و درست باقی بمونن. یعنی دیتابیس نباید هیچ وقت به وضعیتی نادرست یا اشتباه برسه.
📌 اگه transaction ها قوانین دیتابیس رو رعایت نکنن (مثلاً مقدار موجودی کافی نباشه)، سیستم اونا رو رد میکنه و هیچ تغییری روی دادهها اعمال نمیشه.
پس یعنی بعد از هر تغییر در دیتابیس، سیستم باید مطمئن بشه که همهچیز درست و منطبق با قوانین دیتابیس هستش.
فرض کنین شما در یک فروشگاه آنلاین قصد خرید یک کالای خاص رو دارید. وقتی وارد سایت میشن و کالای مورد نظر رو به سبد خرید اضافه میکنید، سیستم باید بررسی کنه که آیا موجودی اون کالا کافیه یا نه.
اگه موجودی کالا تموم شده باشه، سیستم اجازه خرید رو به شما نمیده و از انجام تراکنش جلوگیری میکنه.
این نشون دهنده Consistency است که سیستم همیشه دیتاهای صحیح و قابل اعتماد رو حفظ میکنه.👌🏾
#ACID
#SQL
#Database
@GoldenCodeir
ویژگی Consistency در دیتابیس یعنی بعد از انجام هر transaction، دیتاهامون باید همیشه صحیح و درست باقی بمونن. یعنی دیتابیس نباید هیچ وقت به وضعیتی نادرست یا اشتباه برسه.
📌 اگه transaction ها قوانین دیتابیس رو رعایت نکنن (مثلاً مقدار موجودی کافی نباشه)، سیستم اونا رو رد میکنه و هیچ تغییری روی دادهها اعمال نمیشه.
پس یعنی بعد از هر تغییر در دیتابیس، سیستم باید مطمئن بشه که همهچیز درست و منطبق با قوانین دیتابیس هستش.
فرض کنین شما در یک فروشگاه آنلاین قصد خرید یک کالای خاص رو دارید. وقتی وارد سایت میشن و کالای مورد نظر رو به سبد خرید اضافه میکنید، سیستم باید بررسی کنه که آیا موجودی اون کالا کافیه یا نه.
اگه موجودی کالا تموم شده باشه، سیستم اجازه خرید رو به شما نمیده و از انجام تراکنش جلوگیری میکنه.
این نشون دهنده Consistency است که سیستم همیشه دیتاهای صحیح و قابل اعتماد رو حفظ میکنه.👌🏾
#ACID
#SQL
#Database
@GoldenCodeir
❤4👍2🔥2