คุณต้องการสร้างดัชนีอย่างชัดเจนหรือไม่หรือมันเป็นนัยเมื่อกำหนดคีย์หลัก? คำตอบเดียวกันสำหรับ MyISAM และ InnoDB หรือไม่
คุณต้องการสร้างดัชนีอย่างชัดเจนหรือไม่หรือมันเป็นนัยเมื่อกำหนดคีย์หลัก? คำตอบเดียวกันสำหรับ MyISAM และ InnoDB หรือไม่
คำตอบ:
คีย์หลักจะถูกทำดัชนีเสมอ นี่เป็นสิ่งเดียวกันสำหรับ MyISAM และ InnoDB และโดยทั่วไปจะเป็นจริงสำหรับเอ็นจิ้นการจัดเก็บข้อมูลทั้งหมดที่สนับสนุนดัชนี
ตามที่http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.htmlมันจะปรากฏว่านี่จะเป็นนัย
แม้ว่าสิ่งนี้ถูกถามในปี 2009 ฉันคิดว่าฉันโพสต์การอ้างอิงจริงไปยังเอกสาร MySQL ในคีย์หลัก http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html
คีย์หลักสำหรับตารางหมายถึงคอลัมน์หรือชุดของคอลัมน์ที่คุณใช้ในการสืบค้นที่สำคัญที่สุดของคุณ มีดัชนีที่เกี่ยวข้องเพื่อประสิทธิภาพการสืบค้นที่รวดเร็ว
สำหรับการอ้างอิง MySQL 5.0 โปรดดู: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
ดัชนี MySQL ส่วนใหญ่( คีย์หลัก , UNIQUE, INDEX และ FULLTEXT) จะถูกเก็บไว้ใน B-trees ข้อยกเว้นคือดัชนีในชนิดข้อมูลเชิงพื้นที่ใช้ R-trees และตาราง MEMORY นั้นยังสนับสนุนดัชนีแฮช
คีย์หลักถูกทำดัชนีโดยนัยสำหรับ MyISAM และ InnoDB คุณสามารถตรวจสอบสิ่งนี้ได้โดยใช้อธิบายในแบบสอบถามที่ใช้คีย์หลัก
คุณไม่จำเป็นต้องสร้างดัชนีสำหรับคีย์หลัก ... โดยค่าเริ่มต้นจะทำ
ฉันเดาว่านี่คือคำตอบ
mysql> create table test(id int primary key, s varchar(20));
Query OK, 0 rows affected (0.06 sec)
mysql> show indexes from test \G
*************************** 1. row ***************************
Table: test
Non_unique: 0
Key_name: PRIMARY
Seq_in_index: 1
Column_name: id
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.00 sec)
ดัชนีจะใช้ดีที่สุดในคอลัมน์ที่ใช้บ่อยในที่ที่คำสั่งและในการเรียงลำดับใด ๆ เช่น "เรียงตาม" คุณอาจกำลังทำงานกับฐานข้อมูลที่ซับซ้อนมากขึ้นดังนั้นจึงควรจำกฎง่ายๆ
ดัชนีเร็วขึ้นที่คำสั่งและสั่งซื้อโดย อย่าลืมนึกถึงว่าข้อมูลของคุณจะถูกนำไปใช้อย่างไรเมื่อสร้างตารางของคุณ มีสิ่งอื่น ๆ ให้จำ หากตารางของคุณมีขนาดเล็กมากกล่าวคือมีพนักงานเพียงไม่กี่คนที่แย่กว่านั้นคือการใช้ดัชนีแทนที่จะปล่อยให้เป็นตารางและปล่อยให้ตารางทำการสแกน
ดัชนีมีประโยชน์เฉพาะกับตารางที่มีแถวจำนวนมากเท่านั้น
สิ่งที่ต้องจำไว้อีกข้อหนึ่งคือการแย้งในสถานการณ์ของฐานข้อมูลพนักงานของเราคือถ้าคอลัมน์นั้นมีความยาวแปรผันดัชนี (รวมถึง MySQL ส่วนใหญ่) จะทำงานได้อย่างมีประสิทธิภาพน้อยกว่ามาก
อย่าลืมเข้าร่วมด้วย! เขตข้อมูลการรวมที่จัดทำดัชนีจะช่วยเร่งความเร็วสิ่งต่างๆ
คีย์หลักจะถูกทำดัชนีโดยอัตโนมัติและไม่ซ้ำกัน ดังนั้นระวังอย่าสร้างดัชนีซ้ำซ้อน
ตัวอย่างเช่นถ้าคุณสร้างตารางเช่น
CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;
เนื่องจากคุณต้องการจัดทำดัชนีคีย์หลักและบังคับใช้ข้อ จำกัด ที่ไม่ซ้ำใครคุณจะต้องสร้างดัชนีสามรายการจริง ๆfoo
!
เราสามารถนึกถึงคอลัมน์คีย์หลักเป็นคอลัมน์อื่น ๆ ที่จัดทำดัชนีโดยมีข้อ จำกัด ของคีย์หลักมาด้วย
ในกรณีการใช้งานส่วนใหญ่เราต้องการทั้งคีย์หลักและคอลัมน์ / คอลัมน์ที่มีการจัดทำดัชนีในตารางเนื่องจากแบบสอบถามของเราไปยังตารางอาจกรองแถวตามคอลัมน์ / คอลัมน์ซึ่งไม่ใช่คีย์หลักในกรณีนี้เรามักจะทำดัชนีคอลัมน์ / คอลัมน์เหล่านั้น เช่นกัน