INDEX INDEX INDEX Index

Document Sample
INDEX INDEX INDEX Index Powered By Docstoc
					INDEX
                        INDEX
       Index คือ สิ่งที่สร้างขึ้นบน Table เพื่อช่วยให้การ
  เข้าถึงข้อมูลใน Table เป็นไปได้อย่างรวดเร็วมากยิ่งขึ้น
  ซึ่งเปรียบเหมือน ดัชนีท้ายเล่มในหนังสือที่รวบรวมคา
  สาคัญต่างๆ และเลขหน้าเอาไว้ โดยสิ่งที่เก็บอยู่ใน Index
  ประกอบด้วย 2 ส่วนคือ
ส่วนแรก เก็บค่าของข้อมูลในคอลัมน์ที่กาหนดให้สร้างเป็น Index
ส่วนที่สอง จัดเก็บที่อยู่ของค่าข้อมูลนั้นในตารางข้อมูลจริง ซึ่งเรา
จะเรียกว่า ROWID
    ในการสร้าง Index จานาเอาคอลัมน์ที่ถูกใช้งานใน
Where Condition บ่อยๆ มาสร้างเป็น index เนื่องจาก
เป็นเงื่อนไขที่ใช้ในการค้นหาข้อมูลใน Table เช่น ใน
Table Customer มีคอลัมน์ ACCOUNT CYCLE และ
TYPE ซึ่งในการค้นหาข้อมูลนั้นเรามักใช้คอลัมน์
ACCOUNT ในการค้นหาข้อมูลเสมอ ดังนั้นเพื่อความ
รวดเร็วในการค้นหาข้อมูลเราจะสร้าง Index ไว้บน
ตาราง Customer ที่คอลัมน์ ACCOUNT เนื่องจากมีการ
เรียกใช้บ่อยครั้งนั่นเอง
     ประเภทของ INDEX
o ระบบฐานข้อมูล Oracle
o ระบบฐานข้อมูล MSSQL
ประเภทของ Index ฐานข้อมูล Oracle
     ในการแบ่งประเภทของ Index สามารถแบ่งออกเป็นหลาย
ประเภทแล้วแต่ละมุมมองที่ใช้ในการแบ่ง โดยสามารถแบ่งออกเป็น 2
แบบ ใหญ่ๆ คือ
1. แบ่งตามลักษณะข้อมูลที่ใช้สร้าง Index ซึ่งการแบ่งประเภทนี้ ยัง
แยกย่อยออกเป็น 2 แบบ คือ
 o Unique Index เป็น Index ที่มีค่าข้อมูลของคอลัมน์ที่นามาใช้ใน
    การสร้างไม่ซ้ากัน
 o Non-Unique Index เป็น Index ที่มีค่าข้อมูลที่ของคอลัมน์ที่
    นามาใช้สร้างซ้ากันได้
    Index ทั้ง 2 ประเภท นี้สามารถสร้างจากข้อมูล 1
คอลัมน์ หรือมากกว่าก็ได้ โดยถ้าสร้างเป็น Unique
Index ข้อมูลต้องมีค่าไม่ซ้ากันเลย เช่นหาก Index
ประกอบด้วย 3 คอลัมน์ ค่าของข้อมูลใน 3 คอลัมน์
รวมกันต้องไม่ซ้ากันเลยหากข้อมูลในคอลัมน์ที่กาหนด
เป็น Unique Index มีค่าซ้ากันเราจะไม่สามารถเพิ่ม
ข้อมูลนั้นเข้าไปในตารางได้ ซึ่งแตกต่างกับ Non-
Unique Index ที่สามารถเพิ่มข้อมูลที่มีค่าซ้ากันลงไปได้
2. แบ่งตามประเภทการจัดเก็บของ Index
ซึ่งการแบ่งประเภทนี้ ยังแบ่งย่อยออกเป็น 2 แบบ คือ
   oNon-Partitioned Index เป็น Index ที่สามารถจัดเก็บอยู่ใน
    Table space เดียวเท่านั้น ไม่สามารถแบ่งออกเป็น
    ส่วนย่อยๆ เพื่อเก็บไว้ในหลายๆ Table space ได้
   oPartitioned Index เป็น Index ที่สามารถแบ่งแยกออกเป็น
    ส่วนๆ และจัดเก็บอยู่ใน Table space มากกว่า 1 ได้
                                          ประเภทของ Index
ประเภทของ INDEX ฐานข้อมูล MSSQL
Index มีสองประเภท คือ
o Cluster Index
o Non-Cluster Index
o Cluster Index คือ ข้อมูลจะจัดเรียงเก็บแบบ Sorted
  และเก็บเป็นลาดับ ตามลาดับของ Index (Index Order)

       ตัวอย่างเช่น ฐานข้อมูลลูกค้าที่ประกอบด้วย ชื่อ
  นามสกุล และอื่นๆ ก่อนที่จะประกาศ Index ให้แก่ฐานข้อมูล
  ข้อมูลจะถูกจัดเก็บตามลาดับที่ได้รับการป้อนเข้ามาจาก
  ภายนอก แต่ถ้าประก่ศ Index ให้กับฐานข้อมูลจะทาให้ข้อมูล
  ทั้งหมดถูกจัดเรียงใหม่ตามตัวอักษร
oNon-Custer Index
           จะเก็บรักษา Index file ที่ประกอบด้วย
   Pointer ที่ใช้ในการอ้างอิงข้อมูลว่าอยู่ที่ใดในตาราง
   โดยขึ้นอยู่กับว่า Cluster Index จัดการกับข้อมูล
   อย่างไรเมื่อมีการ query จะมีการใช้ non-cluster
   Index เพื่ออ่านสองอย่างคือ อ่านค่า Index จาก
   Index file และอ่านค่าข้อมูลจริงจากตาราง
                    เนื่องจาก Non-Cluster Index ขึ้นอยู่
กับพื้นที่ที่เก็บข้อมูล และ ขึ้นอยู่กับว่า Cluster Index จะ
                                ้
จัดการกับข้อมูลอย่างไร ดังนันควรกาหนด Cluster
Index ก่อน เพราะข้อมูลจะถูกจัดเรียงอัตโนมัติทาให้เรา
ไม่ต้องอ่านค่า สองครั้ง ด้วยเหตุนี้เวลาประกาศ Primary
Key จึงนิยมประกาศเป็น Cluster Index ดังนั้น ดัชนี
เป็นวิธีการจัดการ เพื่อให้สามารถเรียกใช้ข้อมูลอย่าง
ถูกต้องและรวดเร็ว
โครงสร้างภายในของ Index
โครงสร้างภายในที่สาคัญของ Index ได้แก่
oโครงสร้างแบบ B-Tree Index
oโครงสร้างแบบ Bitmap Index
oReversed Key Index
oFunction-Based Index
       โครงสร้างแบบ B-Tree Index
    เป็น Index ที่มีการจัดเก็บข้อมูลอยู่ในรูปแบบ
โครงสร้างต้นไม้ (Tree Structure) โดยอยู่ในรูปแบบ
ของ Balance Tree ซึ่งประกอบไปด้วย Root Node,
Branch Node และ Leaf Node(เก็บค่า ROWID) การ
จัดเก็บ Index ในรูปแบบนี้จะทาให้การค้นหาข้อมูลมี
ความรวดเร็วยิ่งขึ้น
โครงสร้างแบบ B-Tree Index




ภาพแสดง รุปแบบ Index แบบ B-Tree Index
      โครงสร้างแบบ Bitmap Index
    เป็น Index ที่มีการจัดเก็บข้อมูลอยู่ในรูปแบบ
Bitmap คือ เก็บในรูปแบบ 1 กับ 0 เท่านั้น มีความเร็ว
ในการทางานสูงเหมาะกับข้อมูลที่มีค่าของข้อมูลซ้ากัน
เป็นช่วงมากๆ และมีการเปลี่ยนแปลงน้อย
      โครงสร้างแบบ Bitmap Index
     ตัวอย่างเช่น ตาราง Customer ได้เก็บข้อมูลลูกค้าที่
ประกอบไปด้วย ชื่อ นามสกุล และที่อยู่ของลูกค้า โดยมีการ
            ่
เก็บข้อมูลทีอยู่ว่าลูกค้าอยู่ในภาคอะไร (North South West
Center) หากเราต้องการสร้าง Index บนคอลัมน์นี้และในกรณี
ที่จานวนข้อมูลใน Table นี้มีมาก การสร้าง B-Tree Index จะ
ไม่แหมาะสมเพราะข้อมูลมีพียง 4 ค่าเท่านั้น และค่าการ
กระจายตัวของข้อมูลน้อยเกินไป ดังนั้นการสร้าง Index แบบ
Bitmap จะเหมาะสมกว่า
โครงสร้างแบบ Bitmap Index




 ภาพแสดง รุปแบบ Index แบบ Bitmap Index
     โครงสร้างแบบ Reversed Key Index
    เป็น Index ที่มีการจัดเก็บข้อมูลอยู่ในรูปแบบ
Balanced Tree เช่นเดียวกันกับ B-Tree Index คือ
ประกอบไปด้วย Root Node, Branch Node และ Leaf
Node แต่สิ่งที่แตกต่างระหว่าง B-Tree กับ Reversed
Key Index คือ Reversed Key Index จะนาค่าข้อมูล
มากลับค่าก่อนที่จะนามาสร้าง Index เพื่อให้ข้อมูล
กระจายตัวได้ดีมากขึ้น
    ตัวอย่างเช่น ต้องการนาข้อมูลรหัสพนักงานมาสร้างเป็น
Reversed Key Index โดยกาหนดรหัสข้อมูลพนักงานเป็น 7521 เมื่อ
นามาสร้าง Index ค่าของคีย์จะถูกกลับค่าเป็น 1257
     โครงสร้างแบบ Function-Based Index
     เป็นอินเด็กซ์ที่มีโครงสร้างเป็นแบบ Balance Tree
เช่นเดียวกันกับ B-Tree Index และ Reverse Key Index แต่
Function-Based Index นั้นสามารถเพิ่มฟังก์ชั่นเข้าไปใน
คอลัมน์ที่ต้องการสร้างอินเด็กซ์ได้ เช่น UPPER(name)
หมายถึง การเปลี่ยนค่าของ name ให้เป็นอักษรใหญ่ทั้งหมด
หรือ LOWER(name) หมายถึง การเปลี่ยนค่าของ name ให้
เป็นตัวอักษรเล็กทั้งหมด เป็นต้น
    โครงสร้างแบบ Function-Based Index
    ค่าของผลลัพธ์ที่ได้จากฟังก์ชันนี้จะถูกนามาสร้าง
เป็นอินเด็กซ์ใช้ฟังก์ชันในการค้นหาด้วน เช่น SELECT
* FROM Vendor WHERE UPPER(name) = ‘JOHN’;
เป็นต้น เนื่องจากถ้าตาราง Vendor มีฟังก์ชันที่สร้าง
บนคอลัมน์ name ดังนั้นเพื่อให้มีการใช้อินเด็กซ์เราก็
จะต้องสร้าง Function-Based Index ตาม
UPPER(name) ขึ้นมาด้วยแสดงในรูป
 โครงสร้างแบบ Function-Based Index




ภาพแสดง รุปแบบ Index แบบ Function-Based Index
หลักการพิจารณาเพื่อเลือกสร้าง Index
   หลักการพิจารณาเพื่อเลือกสร้าง Index
column ที่มักถูกใช้ในการ JOIN ระหว่างตาราง
 column ที่มักถูกเรียงด้วย ORDER BY
 column ที่มักถูกจัดกลุ่มด้วย GROUP BY
 column ที่มักถูกใช้กบ Aggreate Function
                      ั
 column ที่มักถูกเปรียบเทียบเงื่อนไขโดย WHERE
column ที่มักถูกใช้เป็น FOREIGN KEY
หลักการพิจารณาเพื่อไม่เลือกสร้าง Index
  หลักการพิจารณาเพื่อไม่เลือกสร้าง Index
column ที่เป็นประเภท text, image และ bit
 column ที่มีค่าซ้ากันบ่อยๆ เช่น เพศ ที่มีเพียง 2 ค่า
 column ที่มีขนาดของข้อมูลมากๆ เช่น char(100)
 column ที่ไม่เคยถูกใช้ใน query เลย
 table ที่มีแถวข้อมูลไม่มากนัก
 table ที่มีการเพิ่ม ลบ แก้ไข ข้อมูลบ่อยๆ
คาสั่ง SQL ในการสร้าง Index
   คาสั่งในการสร้าง SQL ในการสร้าง Index
รูปแบบของคาสั่ง SQL CREATE INDEX
CREATE INDEX index_name
ON table_name (column_name)

รูปแบบของคาสั่ง SQL CREATE UNIQUE INDEX
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
คาสั่ง SQL ในการแก้ไข Index
   คาสั่งในการสร้าง SQL ในการแก้ไข Index


รูปแบบของคาสั่ง SQL ALTER INDEX
ALTER INDEX index_name;
คาสั่ง SQL ในการลบ Index
    คาสั่งในการสร้าง SQL ในการลบ Index


รูปแบบของคาสั่ง SQL DROP INDEX
DROP INDEX index_name;

				
DOCUMENT INFO
Tags:
Stats:
views:331
posted:9/21/2011
language:Thai
pages:33