สร้างดัชนีเทียบกับแก้ไขตารางเพิ่มดัชนี - MySQLism หรือ SQL Standard?


28

เพิ่งเจอปัญหาแปลก ๆ โดยขึ้นอยู่กับว่าฉันจะสร้างดัชนีได้อย่างไรจำเป็นต้องใช้ชื่อดัชนี

http://dev.mysql.com/doc/refman/5.5/en/create-index.html

http://dev.mysql.com/doc/refman/5.5/en/alter-table.html

CREATE INDEX `random_name` ON `my_table` (`my_column`); # Requires an index name

ALTER TABLE `my_table` ADD INDEX (`my_column`); # Does not require an index name

สำหรับฉันแล้วดูเหมือนว่าการเรียก CREATE INDEX ไม่ควรใช้ชื่อดัชนี ฉันสงสัยว่านี่เป็น MySQLism หรือมาตรฐาน SQL ใช่หรือไม่

คำตอบ:


25

ฉันไม่คิดว่ากำหนดมาตรฐาน SQL วิธีการในการสร้างดัชนีที่ทั้งหมด

ข้อความจากหน้า Wikipedia นี้ :

มาตรฐาน

ไม่มีมาตรฐานเกี่ยวกับการสร้างดัชนีเนื่องจาก ISO SQL Standard ไม่ครอบคลุมด้านกายภาพ ดัชนีเป็นส่วนหนึ่งของฟิสิคัลของแนวคิดของฐานข้อมูลระหว่างกลุ่มอื่น ๆ เช่นหน่วยเก็บข้อมูล (tablespace หรือกลุ่มไฟล์) ผู้ขาย RDBMS ทั้งหมดให้ไวยากรณ์ CREATE INDEX พร้อมตัวเลือกเฉพาะบางอย่างซึ่งขึ้นอยู่กับฟังก์ชันการทำงานที่ลูกค้ามอบให้

คู่มือ Postgres ดูเหมือนจะสนับสนุนสิ่งนี้ได้ที่นี่:

ไม่มีข้อกำหนดสำหรับดัชนีในมาตรฐาน SQL

หลักฐานเพิ่มเติมภายใต้คำถามที่เกี่ยวข้องกับเรื่องนี้


6
MySQL เป็น DBMS เดียวที่ฉันรู้ซึ่งอนุญาตให้เพิ่มดัชนีที่ชัดเจนโดยใช้ALTER TABLE(มีบางกรณีที่ดัชนี DBMS จะถูกสร้างขึ้นโดย DBMS ต่างๆเพื่อสนับสนุนข้อ จำกัด แต่นั่นไม่ใช่สิ่งที่ฉันหมายถึง)
a_horse_with_no_name

@a_horse_with_no_name: ตั้งข้อสังเกตอย่างถูกต้อง ฉันไม่เข้าใจว่าทำไม MySQL บังคับให้เราส่งผ่าน index_name เมื่อเห็นได้ชัดว่าสามารถจัดการกับชื่อที่ไม่ได้อยู่ข้างใต้ มันเป็น PITA ที่ถูกบังคับให้ต้องทำการเปลี่ยนแปลงเพียงเพื่อหลีกเลี่ยงการตั้งชื่อดัชนี
Mike Purcell

-1

หากคุณไม่มีชื่อสำหรับดัชนี MySQL จะตั้งชื่อดัชนีให้คุณโดยอัตโนมัติ

ALTER TABLE my_table ADD INDEX (col1);
ALTER TABLE my_table ADD INDEX (col1, col2);
ALTER TABLE my_table ADD INDEX (col2);

SHOW INDEX FROM my_table;

ALTER TABLE ADD INDEXข้อความข้างต้นจะผลิตดัชนีต่อไปนี้:

  • col1
  • col1_2
  • col2

หากคุณสร้างดัชนีที่มีเพียงหนึ่งคอลัมน์อาจไม่จำเป็นต้องระบุชื่อสำหรับดัชนี (เนื่องจากชื่อของดัชนีจะเหมือนกับชื่อคอลัมน์) แต่ถ้าคุณสร้างดัชนีที่มีหลายคอลัมน์มันจะเป็นการดีกว่าถ้าจะให้ชื่อของดัชนีนั้นจะเป็นการง่ายกว่าที่จะระบุดัชนี

เป็นวิธีปฏิบัติที่ดีในการตั้งชื่อให้กับดัชนี (และนำหน้าด้วยidxหรือเพื่อระบุว่าเป็นดัชนี):

ALTER TABLE my_table ADD INDEX idx_my_column (my_column);

-- or
CREATE INDEX idx_my_column ON my_table (my_column);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.