Index гэж юу вэ?
Юун түрүүн index-н тухай ярихын өмнө block гэж юу болох талаар мэдэх хэрэгтэй. Block нь Oracle-н өгөгдлийг уншиж бичдэг disk-ны хамгийн бага нэгж юм. Oracle дээрхи бүх table-үүд, index-үүд, cluster-үүд block дотор хадгалагддаг. Ямар ч өгөгдлийн сан дээр Block-н хэмжээг тохируулж өгч болдог бөгөөд ихэвчлэн 4kb, 8kb 16kb эсвэл 32 kb хэмжээтэй байдаг. Table дэх мөрнүүд нь үүнээс ч бага хэмжээтэй бөгөөд ерөнхийдөө олон мөрүүд нэг block-т багтдаг. Тиймээс чи хэзээ ч нэг ширхэг мөрийг уншдаггүй, бөгөөд нэг мөрийг уншихын тулд үргэлж бүхэл бүтэн block-г уншиж хэрэггүй мөрүүдээ хасдаг. Ингэж багасгах нь Oracle Performance Tuning хийх үндэс болдог.
Oracle нь 2 төрлийн index загвар ашигладаг үүнд b-tree indexes болон bitmap indexes.
The "-Tree" in b-Tree
B-tree index нь мод хэлбэртэй өгөгдлийн бүтэц бөгөөд өгөгдлийн сангийн block-уудын мод юм, мөрийн биш.- Index-н Block-уудыг утасны жагсаалтын хуудас гэж төсөөлвөл утасны жагсаалтын хуудас бүр олон тэмдэглэгээтэй тэдгээр нь суурын утасны байршилыг заах (row in the table ) нэр (indexed column value) болон хаяг-г (ROWID) агуулдаг.
- Хуудас болон хуудаслалт нь бүгд хуудсан дээрх нэрээр эрэмбэлэгдсэн.
Эрэмбэлэгдсэн утасны жагсаалт нь хүмүүс ашиглахад асуудалгүй байдаг. Учир нь бид утасны жагсаалт ашиглах үедээ хайж байгаа зүйлээ агуулж байгаа хуудсыг олохын тулд бүхэл бүтэн хуудсыг бүгдийг нь уншихгүйгээр хуудас бүрийн дээр байдаг томоор бичсэн нэрийг л уншдаг. Oracle нь дан ганц нэрийг (row) уншиж чаддаггүй бүхэл бүтэн хуудсыг (block) унших хэрэгтэй болдог.
Хэрэв бидэнд хуудсыг гүйлгэх эрхий хуруу байхгүй байсан бол бид магадгүй зөвхөн нэр болон хуудасны дугаарыг агуулсан жагсаалт үүсгэх байсан байх. Энэ л index-н branch block-н ажилладаг зарчим юм; block бүрийн эхний мөрийг block-н хаягийн хамт багтаасан багасгасан жагсаалт. Том хэмжээний утасны жагсаалтын хувьд энэ жагсаалт нь ч мөн ялгаагүй олон хуудас болох боломжтой бөгөөд процесс давтагдана.
Gallileo гэдэг нэрийг b-Tree утасны жагсаалтаас олохын тулд:
- Хуудас 1. дээр хуудас 6 нь Fermat, хуудас 7 нь Hawking-р эхэлж байгааг заана.
- Хуудас 6. дээр хуудас 350 нь Fyshe болон хуудас 351 нь Garibaldi-р эхэлж байгааг заана.
- Хуудас 350, нь яг аль block дээр Gallileo-н хаяг болон утасны дугаар байгааг хэлж өгнө.
Table-н хэдэн сая мөрнөөс хүссэн мөрөө олохын тулд ердөө 3 block-р л дамжлаа. Бодит амьдрал дээр block нь ихэвчлэн 100-с дээш мөр багтаадаг.
Бид энэ хүртэл index-н сайн талыг харж ирлээ. Гэвч заримдаа index нь хэрэг болохгүй эсвэл бүүр query-г удаашруулах ч тохиолдол гарах нь бий
b-tree index нь >, <,
LIKE
, IN
, or BETWEEN
оператор-гүй where clause дээр хэрэг болохгүй. Мөн b-tree нь !=
, NOT IN
, NOT LIKE
эдгээр операторууд дээр мөн янз бүрийн түвэгтэй join , sub-query гэх мэт олон нөхцөлүүд дээр b-tree index дэмжихгүй .Bitmap индекс нь өөр хоорондоо бага ялгаатай GENDER, STATUS, RELATION гэх баганууд дээр хамгийн тохиромжтой. Гэхдээ тэглээ гээд бүхэлдээ яг ийм гэсэн үг биш. бодит амьдрал дээр bitmap индексийг өгөгдөл нь олон зэрэгцээ системээр шинэчлэгдээд байдаггүй тийм өгөгдөл дээр хэрэглэхийг зөвлөдөг.
Bitmap индексийг unique багана дээр ашигласнаар хэд хэдэн сул талууд бий болдог. Нэгт хангалттай хүрэлцэлцээтэй зай хэрэгцээтэй(Oracle үүнийг санал болгодоггүй).