2009-10-18

Индекс ашиглах нь (SQL Server)

Мэдээллийн сан (database) -гийн өгөгдөл, мэдээллийн хэмжээ (ялангуяа дэлгүүр, банк, суурин болон үүрэн телефоны компани г.м байгууллагуудын мэдээлэл нэг минут, нэг цаг, өдөрт хэдэн мянга, саяаар нэмэгддэг) ихсэхийн хэрээр түүний гүйцэтгэх хурд (performance) эсрэгээр буурч эхэлдэг.

Гэдийгээр маш сайн оновчтой database normalization болон denormalization хийсэн мэдээллийн сангийн дизайнтай байлаа ч SQL Tuning хийгээгүй бол мэдээллийн хэмжээ ихсэх тусам ажиллах хурд үхэр тэрэг мөлхөхтэй адил удааширдаг. Тэгэхээр энэ үхэр тэргийн хурдыг автомашины хурд болгон нэмэгдүүлэх сайн аргуудын нэг бол SQL Tuning –тай холбоотой индекс (index) -ийг зөв оновчтой ашиглах гэж хөгжүүлэгчид сайн мэдэх байх.

Индексийг хэзээ хаана ашиглавал оновчтой байх цөөн хэдэн доорх зөвлөмжүүдийг хэрэгжүүлж байх нь хөгжүүлэгч бидэнд нэн хэрэгтэй байдаг. Үүнд:

  1. Query-ний WHERE дээр орсон багана (column) -уудын хувьд индекс үүсгэх
  2. Хүснэгт (table)-ийн гадаад түлхүүр (foreign key) баганууд дээр индекс үүсгэх
  3. Нэг хүснэгт (table) -нд дор хаяж нэг кластер индекс (clustered index) үүсгэх. Ихэвчлэн түлхүүр багана (primary key column) дээр үүсгэдэг.
  4. ORDER BY, GROUP BY, TOP болон DISTINCT –үүдэд байнга ашигладаг багануудын хувьд индекс үүсгэх
  5. Онцын шаардлагагүй индекс бус харин байнга хэрэглэгдэх индексийг үүсгэж ашиглах.
  6. Мэдээлэл нь байнга нэмэгдэж, хасагдаж байдаг динамик өгөгдөлтэй хүснэгтүүд (dynamic table)-ийн хувьд хэт олон индексийг үүсгэхээс татгалзах.
  7. Мэдээлэл нь байнга нэмэгдэж, хасагдах нь маш бага буюу тогтмол өгөгдөлтэй хүснэгтүүд (static table)-ийн хувьд индекс үүсгэхдээ FILLFACTOR –ын PAD_INDEX-ийг өндөр хувьтайгаар, харин динамик хүснэгтийн хувьд маш бага (default 0) хувьтайгаар тохируулж байх.
  8. Индексийг аль болох давхардуулж үүсгэхгүй байх
  9. Оновчтой индекс үүсгэхийн тулд үр дүнг нь үнэлэх бусад хэрэгсэл ашиглах (Index Tuning Wizard)

    Happy coding!

    PS: Өөрийнхөө сэтгэгдлийг үлдээвэл танд талархах болно.


    1 comment: