وبلاگ امیررضا رستنده

نکاتی در ارتباط با دیتابیس اوراکل و لینوکس

وبلاگ امیررضا رستنده

نکاتی در ارتباط با دیتابیس اوراکل و لینوکس

  • ۰
  • ۰

سلام

همانطور که مستحضرید استفاده از ایندکس مناسب باعث بهبود عملکرد سیستم می شود. در زیر لیستی از نکات ایندکس گذاری به طور کلی بیان شده است، بدیهی است که انتخاب نوع ایندکس و جزئیات پیاده سازی مستلزم بررسی بیشتر می باشد.

در خصوص ایجاد ایندکس بر روی جداول موارد زیر پیشنهاد می گردند:

  1. در حدی که واقعاً نیاز هست از ایندکس استفاده کنید و از ایجاد ایندکس های اضافی اجتناب نمایید. وجود ایندکس صحیح باعث بهبود برخی از دستورات SQL می شود ولی از طرفی باعث کاهش عملکرد در زمان ثبت اطلاعات می شود و همچنین فضای دیسک اضافی مصرف می شود.
  2. برای ایندکس گذاری باید Query های اصلی جدول مورد نظرتان را خوب بدانید. انتخاب نوع و نحوه ایندکس گذاری بسیار به Query وابسته است. ایندکس گذاری روی ستون هایی از جدول که دائم در شرط Query استفاده می شوند تاثیر خوبی بر عملکرد دارد.
  3. برای تمام جداول، کلید اصلی بسازید. با این کار به طور خودکار بر روی ستون یا ستون های کلید اصلی ایندکس ساخته می شود و این ایندکس در Join ها بسیار موثر است.
  4. برای ستون های مربوط به کلید خارجی ایندکس بسازید. از آنجایی که معمولاً این ستون ها در شرط های join استفاده می شوند، ساخت ایندکس روی ستون های کلید خارجی عملکرد را بهبود می دهد. از طرفی ایجاد ایندکس روی ستون کلید خارجی موجب کاهش مشکل Lock روی جدول Parent به هنگام عملیات های Delete و Update می شود.
  5. با توجه به کاربرد مورد نظر از نوع ایندکس مناسب استفاده نمایید. استفاده از ایندکس مناسب باعث افزایش عملکرد سیستم می گردد. لذا لازم است انواع ایندکس و کاربرد هر کدام از آنها را بدانید.
  6. اگر در انتخاب نوع ایندکس شک دارید از ایندکس معمولی (B*Tree Index) استفاده کنید. در اکثر مواقع این نوع ایندکس پاسخگوی نیاز Application می باشد.
  7. از Bitmap Index در سیستم های Warehouse استفاده کنید. استفاده از از Bitmap Index در محیط های OLTP بسیار بد می باشد و باعث ایجاد Lock در سیستم می شود. این ایندکس ها برای جاهایی مناسب می باشند که اطلاعات به ندرت به روز رسانی می شوند. همچنین در محیط های Warehouse در عملیات های منطقی AND و OR بسیار کاربردی می باشند.
  8. ایندکس ها را بدون دلیل Rebuild نکنید. تنها زمانی باید این کار انجام شود که ایندکس unusable شده است و یا می خواهیم ایندکس را به Tablespace دیگر منتقل کنیم.
  9. استفاده از ایندکس ها را مانیتور کنید و ایندکس های اضافی را پاک کنید. وجود ایندکس صحیح باعث بهبود برخی از دستورات SQL می شود ولی از طرفی باعث کاهش عملکرد در زمان ثبت اطلاعات می شود و همچنین فضای دیسک اضافی مصرف می شود.
  10. قبل از پاک کردن ایندکس ابتدا آن را Invisible کنید. با این کار قبل از حذف ایندکس، مطمئن می شویم که این کار تاثیر بدی بر عملکرد سیستم ندارد.
  11. اگر حجم دیتا برای insert خیلی زیاد است، ایندکس های را پس از insert کردن اطلاعات ایجاد کنید یا قبل از شروع bulk insert آنها را unusable کنید. تا عمل insert با سرعت بیشتری انجام شود و در نهایت آنها را rebuild کنید.
  12. چنانچه یک ایندکس از چند ستون می سازید، ترتیب قرار گیری ستون ها به ترتیب استفاده باشد. ترتیب ستون های ایندکس در عملکرد تاثیر بسیار دارد. به عنوان مثال اگر شما روی ستون های A,B ایندکس ساخته باشید (ابتدا ستون A و سپس ستون B) و در دستورات ستون B را بیشتر استفاده می کنید، ممکن است تاثیر چندانی از ایجاد ایندکس مشاهده نکنید (عمل Index Skip Scan در این مورد اتفاق می افتد)
  13. در نظر داشته باشید که در B*Tree Index (ایندکس های معمولی) مقداری برای null ثبت نمی شود و حتی با تعریف ایندکس بر روی این ستون ها، اگر مقادیر null در دستور Select حذف نشوند، از ایندکس استفاده نمی شود. به عنوان مثال در دو دستور زیر با وجود اینکه بر روی ستون manager_id ایندکس وجود دارد، از این ایندکس استفاده نمی شود:

Select * from hr.employees where manager_id is null;

Select * from hr.employees where manager_id is not null;

  1. برای ستون هایی که دائماً در عبارات Order by, Group by, Union, Distinct وجود دارند ایندکس تعریف کنید.

 

 

موفق باشید

  • ۹۹/۰۶/۰۵
  • امیررضا رستنده

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی