StepCoding

การแก้ไข Index ใน Table

อ่าน [3391] หมวดหมู่: การสร้างฐานข้อมูล

ในการที่จะเพิ่ม index ให้กับ table เราสามารถใช้คำสั่ง ALTER TABLE หรือ CREATE INDEX ก็ได้ ส่วนการลบ index ก็สามารถใช้คำสั่ง ALTER TABLE หรือ DROP INDEX ก็ได้ แต่การใช้คำสั่ง ALTER TABLE จะมีความยืดหยุ่นมากกว่า

ในการเพิ่ม index ให้กับ table โดยใช้คำสั่ง ALTER TABLE จะต้องใส่คำ สั่ง ADD ตามหลังคำสั่งนี้ด้วย ตามด้วยชนิดของ INDEX ที่ต้องการสร้าง และสุดท้ายจะต้อง กำหนดชื่อ field ที่ต้องการสร้าง index ไว้ภายในวงเล็บ เช่น สมมติว่าผมต้องการให้ table "Employee" ที่มีโครงสร้างตารางอยู่แล้ว แต่ต้องการเพิ่ม PRIMARY KEY เข้าไปใหม่ และเพิ่ม INDEX ใหม่เข้าไปด้วย เราไปดูขั้นตอนการสร้างกันเลยครับ

# โครงสร้างเดิม (ที่ไม่มี index)
CREATE TABLE Employee
(
	ID	INT NOT NULL,
	LastName	CHAR(30) NOT NULL,
	FirstName	CHAR(30) NOT NULL,
	PostCode	CHAR(5) NOT NULL
);
# ในกรณีที่ต้องการกำหนดให้ "ID" เป็น primary key
ALTER TABLE Employee ADD PRIMARY KEY (ID);

# ในกรณีที่ต้องการเพิ่ม INDEX โดยใช้ฟิลด์ "LastName" และ "FirstName"
ALTER TABLE Employee ADD INDEX (LastName, FirstName);

ใน MySQL นี้ยังสามารถกำหนดการแก้ไข INDEX จำนวนมาก ภายในคำสั่ง ALTER TABLE เดียวได้ โดยจะต้องคั่นแต่ละการทำงานด้วย comma เช่น

# ต้องการกำหนด "ID" เป็น primary key รวมไปถึงกำหนดให้ฟิลดื LastName และ FirstName เป็น INDEX
ALTER TABLE Employee ADD PRIMARY KEY (ID), ADD INDEX (LastName, FirstName);

ในการลบ index ด้วยคำสั่ง ALTER TABLE จะต้องกำหนดคำสั่ง DROP ตามหลัง และตามด้วยชื่อของ INDEX ที่จะลบ แต่ถ้าต้องการลบ PRIMARY KEY นั้นเป็นวิธี ที่ง่ายมาก เนื่องจาก primary key มีเพียงตัวเดียวเท่านั้น

ALTER TABLE Employee DROP PRIMARY KEY;

ในการลบ INDEX ชนิดอื่น ๆ เราจะต้องระบุชื่อของ INDEX แต่ถ้าเราไม่รู้ว่า INDEX นั้น ๆ เป็นชื่ออะไร เราสามารถดูโครงสร้างของ table ได้ด้วยคำสั่ง SHOW CREATE TABLE โดยมันจะแสดงข้อมูล INDEX ออกมาด้วย ดังนี้

# คำสั่ง
SHOW CREATE TABLE Employee\G

# ผลลัพธ์
Table: Employee
Create Table: CREATE TABLE Employee (
	ID	int(11)	NOT NULL default 0,
	LastName	char(30)	NOT NULL default '',
	FirstName	char(30)	NOT NULL default '',
	PostCode	char(5)	NOT NULL default '',
	PRIMARY KEY (ID),
	KEY 'LastName' (LastName, FirstName)
) TYPE=MyISAM

จากผลลัพธ์ด้านบนจะเห็นว่าถ้าเราทำการสร้าง index เป็นชนิด INDEX มันจะแสดงเป็น KEY แทน แล้วต่อจากนั้นจะเป็นชื่อของ INDEX (ถ้าเราไม่กำหนดชื่อให้กับ INDEX ตอนสร้าง มันจะใช้ชื่อ field แรกนั้น ๆ เป็นชื่อ INDEX แทน) ซึ่งถ้าเราต้องการที่จะ ลบ INDEX เราก็จะต้องใช้ชื่อตรงส่วนนี้ในการอ้างอิง เช่น

ALTER TABLE Employee DROP INDEX LastName;

นอกจากนี้ยังมีคำสั่งในการเพิ่มและลบ index อีกวิธีหนึ่งก็คือการใช้คำสั่ง CREATE INDEX และ DROP INDEX

การเพิ่ม index โดยใช้คำสั่ง CREATE INDEX นั้นจะต้องกำหนดชื่อ index นั้น ๆ ให้มันด้วย ซึ่งจะแตกต่างจากการเพิ่ม index โดยใช้คำสั่ง ALTER TABLE ตรงที่มันจะ กำหนดชื่อ index ให้เราเองถ้าเราไม่ได้กำหนดมัน

# การเพิ่มฟิลด์ ID ในตาราง Employee เป็น index แบบ UNIQUE ที่ชื่อว่า IDIndex
CREATE UNIQUE INDEX IDIndex ON Employee (ID);

# การเพิ่ม index ที่ชื่อ NameIndex โดยประกอบไปด้วยฟิลด์ LastName และ FirstName
CREATE INDEX NameIndex ON Employee (LastName, FirstName);

ในกรณีที่ต้องการลบ index จะต้องใช้คำสั่ง DROP INDEX ตามด้วยชื่อขง index และชื่อ table

# ลบ INDEX ที่ชื่อ IDIndex ในตาราง Employee
DROP INDEX IDIndex ON Employee;;

# ลบ INDEX ที่ชื่อ NameIndex ในตาราง Employee
DROP INDEX NameIndex ON Employee;

ข้อแตกต่างอีกอย่างระหว่างการแก้ไข index ด้วย ALTER TABLE กับ CREATE INDEX และ DROP INDEX ก็คือ คำสั่ง ALTER TABLE สามารถแก้ไข index ได้ทีละหลายรายการภายในคำสั่งเดียว

ผู้สนับสนุน