อะไรคือความแตกต่างระหว่าง Primary, UNIQUE, INDEX และ FULLTEXT เมื่อสร้างตาราง MySQL?
ฉันจะใช้มันอย่างไร
อะไรคือความแตกต่างระหว่าง Primary, UNIQUE, INDEX และ FULLTEXT เมื่อสร้างตาราง MySQL?
ฉันจะใช้มันอย่างไร
คำตอบ:
KEYหรือINDEXหมายถึงดัชนีปกติที่ไม่ซ้ำกัน อนุญาตให้ใช้ค่าที่ไม่ต่างกันสำหรับดัชนีดังนั้นดัชนีอาจมีแถวที่มีค่าเหมือนกันในคอลัมน์ทั้งหมดของดัชนี ดัชนีเหล่านี้จะไม่บังคับใช้ข้อ จำกัด ใด ๆ กับข้อมูลของคุณดังนั้นพวกเขาจึงใช้สำหรับการเข้าถึงเท่านั้น - เพื่อเข้าถึงช่วงของระเบียนที่รวดเร็วโดยไม่ต้องสแกนทุกระเบียน
UNIQUEหมายถึงดัชนีที่ทุกแถวของดัชนีต้องไม่ซ้ำกัน นั่นคือแถวเดียวกันอาจไม่มีค่าที่ไม่ใช่ค่า NULL เหมือนกันสำหรับคอลัมน์ทั้งหมดในดัชนีนี้เป็นแถวอื่น เช่นเดียวกับการใช้เพื่อเข้าถึงช่วงเร็กคอร์ดที่แน่นอนอย่างรวดเร็วดัชนี UNIQUE สามารถใช้ในการบังคับใช้ข้อ จำกัด ข้อมูลเนื่องจากระบบฐานข้อมูลไม่อนุญาตให้กฎค่าที่แตกต่างแตกหักเมื่อทำการแทรกหรืออัปเดตข้อมูล
ระบบฐานข้อมูลของคุณอาจอนุญาตให้ใช้ดัชนี UNIQUE กับคอลัมน์ที่อนุญาตให้มีค่า NULL ซึ่งในกรณีนี้ทั้งสองแถวจะได้รับอนุญาตให้เหมือนกันหากทั้งสองมีค่า NULL (เหตุผลที่นี่คือ NULL จะถือว่าไม่เท่ากับตัวเอง) อย่างไรก็ตามขึ้นอยู่กับแอปพลิเคชันของคุณคุณอาจพบว่าสิ่งนี้ไม่พึงประสงค์: หากคุณต้องการป้องกันสิ่งนี้คุณควรไม่อนุญาตค่า NULL ในคอลัมน์ที่เกี่ยวข้อง
Primaryทำหน้าที่เหมือนกับดัชนี UNIQUE ยกเว้นว่ามันจะมีชื่อว่า 'primary' เสมอและอาจมีเพียงรายการเดียวในตาราง (และควรมีเพียงรายการเดียวเสมอ) แม้ว่าระบบฐานข้อมูลบางระบบจะไม่บังคับใช้ก็ตาม) ดัชนีหลักมีจุดประสงค์เพื่อเป็นวิธีการหลักในการระบุแถวใด ๆ ในตารางโดยเฉพาะดังนั้นไม่เหมือนกับ UNIQUE ซึ่งไม่ควรใช้กับคอลัมน์ใด ๆ ที่อนุญาตให้มีค่า NULL ดัชนีหลักของคุณควรอยู่ในจำนวนคอลัมน์ที่เล็กที่สุดซึ่งเพียงพอที่จะระบุแถวโดยไม่ซ้ำกัน บ่อยครั้งที่นี่เป็นเพียงหนึ่งคอลัมน์ที่มีตัวเลขที่เพิ่มขึ้นโดยอัตโนมัติ แต่หากมีสิ่งอื่นใดที่สามารถระบุแถวเช่น "countrycode" ในรายการประเทศคุณสามารถใช้แทนได้
ระบบฐานข้อมูลบางระบบ (เช่น InnoDB ของ MySQL) จะเก็บบันทึกของตารางไว้ในดิสก์ตามลำดับที่ปรากฏในดัชนีหลัก
ดัชนีFULLTEXTนั้นแตกต่างจากทั้งหมดข้างต้นและพฤติกรรมของพวกเขาแตกต่างกันอย่างมากระหว่างระบบฐานข้อมูล ดัชนี FULLTEXT มีประโยชน์สำหรับการค้นหาข้อความแบบเต็มที่ทำด้วยประโยค MATCH () / ต่อ (ไม่เหมือนกับสามข้อข้างต้น) ซึ่งโดยทั่วไปแล้วจะนำไปใช้ภายในโดยใช้ b-trees (อนุญาตให้เลือกเรียงลำดับหรือช่วงที่เริ่มจากคอลัมน์ซ้ายสุด) หรือ ตารางแฮช (อนุญาตให้เลือกโดยเริ่มจากคอลัมน์ซ้ายสุด)
ในกรณีที่ดัชนีประเภทอื่นเป็นจุดประสงค์ทั่วไปดัชนี FULLTEXT มีความเชี่ยวชาญเฉพาะในการใช้เพื่อวัตถุประสงค์แคบ ๆ : มันใช้สำหรับการค้นหาข้อความแบบเต็มเท่านั้น
ดัชนีเหล่านี้ทั้งหมดอาจมีคอลัมน์มากกว่าหนึ่งคอลัมน์
ด้วยข้อยกเว้นของ FULLTEXT ลำดับของคอลัมน์จึงมีความสำคัญ: เพื่อให้ดัชนีมีประโยชน์ในการสืบค้นแบบสอบถามจะต้องใช้คอลัมน์จากดัชนีเริ่มต้นจากด้านซ้าย - มันไม่สามารถใช้แค่ส่วนที่สองสามหรือสี่ของ ดัชนีนอกจากจะใช้คอลัมน์ก่อนหน้าในดัชนีเพื่อจับคู่ค่าคงที่ (สำหรับดัชนี FULLTEXT ที่จะเป็นประโยชน์กับแบบสอบถามแบบสอบถามต้องใช้คอลัมน์ทั้งหมดของดัชนี)
NOT NULL
คีย์หลักอยู่ที่จำเป็น MySQL จะรายงานshow columns
ว่าคีย์เฉพาะที่ไม่ใช่ค่า NULL นั้นเป็นคีย์หลักหากไม่มีการกำหนดคีย์หลักอื่น
ทั้งหมดนี้เป็นดัชนีประเภทต่างๆ
หลัก:จะต้องไม่ซ้ำกันเป็นดัชนีเป็น (น่าจะ) ดัชนีทางกายภาพสามารถมีเพียงหนึ่งต่อตาราง
ที่ไม่ซ้ำกัน:มันบอกว่า คุณไม่สามารถมีมากกว่าหนึ่งแถวที่มี tuple ของค่านี้ โปรดทราบว่าเนื่องจากคีย์ที่ไม่ซ้ำกันสามารถมีได้มากกว่าหนึ่งคอลัมน์จึงไม่จำเป็นต้องหมายความว่าแต่ละคอลัมน์ในดัชนีนั้นไม่ซ้ำกัน แต่การรวมกันของค่าต่างๆในคอลัมน์เหล่านี้จะไม่ซ้ำกัน
ดัชนี:หากไม่ใช่หลักหรือไม่ซ้ำกันมันจะไม่ จำกัด ค่าที่แทรกลงในตาราง แต่จะอนุญาตให้ค้นหาได้อย่างมีประสิทธิภาพยิ่งขึ้น
fulltext:การจัดทำดัชนีแบบพิเศษที่อนุญาตการค้นหาข้อความแบบเต็ม คิดว่าเป็น (โดยพื้นฐาน) การสร้าง "ดัชนี" สำหรับแต่ละคำว่า "" ในคอลัมน์ที่ระบุ
ฉันรู้สึกว่าสิ่งนี้ได้รับการคุ้มครองอย่างดีอาจยกเว้นดังต่อไปนี้:
Simple KEY
/ INDEX
(หรือเรียกอีกอย่างว่าSECONDARY INDEX
) จะเพิ่มประสิทธิภาพหากการเลือกมีเพียงพอ ในเรื่องนี้คำแนะนำปกติคือถ้าจำนวนของเร็กคอร์ดในชุดผลลัพธ์ที่ใช้ดัชนีเกินกว่า 20% ของจำนวนเร็กคอร์ดทั้งหมดของตารางพาเรนต์ดัชนีจะไม่ได้ผล ในการปฏิบัติแต่ละสถาปัตยกรรมจะแตกต่างกัน แต่ความคิดยังคงถูกต้อง
ดัชนีรอง (และเฉพาะเจาะจงกับ mysql) ไม่ควรถูกมองว่าเป็นวัตถุที่แยกจากกันและแตกต่างอย่างสิ้นเชิงจากคีย์หลัก ในความเป็นจริงทั้งสองควรใช้ร่วมกันและเมื่อทราบข้อมูลนี้แล้วให้เครื่องมือเพิ่มเติมเพื่อ mysql DBA: ใน Mysql ดัชนีฝังฝังคีย์หลัก มันนำไปสู่การปรับปรุงประสิทธิภาพที่สำคัญโดยเฉพาะอย่างยิ่งเมื่อสร้างอย่างชาญฉลาดครอบคลุมดัชนีเช่นที่อธิบายไว้ที่นั่น
หากคุณรู้สึกว่าข้อมูลของคุณควรUNIQUE
เป็นดัชนีที่ไม่ซ้ำใคร คุณอาจคิดว่ามันเป็นทางเลือก (ตัวอย่างเช่นการทำงานในระดับแอปพลิเคชัน) และดัชนีปกติจะทำ แต่จริง ๆ แล้วมันหมายถึงการรับประกันสำหรับ Mysql ว่าแต่ละแถวไม่ซ้ำกันซึ่งมีประโยชน์ต่อประสิทธิภาพโดยบังเอิญ
คุณสามารถใช้FULLTEXT
(หรือเรียกอย่างอื่นSEARCH INDEX
) กับ Innodb (ใน MySQL 5.6.4 ขึ้นไป) และ Myisam Engines
FULLTEXT
บนCHAR
, VARCHAR
และTEXT
ประเภทคอลัมน์FULLTEXT
ดัชนีเกี่ยวข้องมากกว่าการสร้างดัชนี มีกลุ่มของตารางระบบที่สร้างขึ้นเป็นระบบแคชที่แยกจากกันอย่างสมบูรณ์และมีการใช้กฎและการปรับให้เหมาะสมบางอย่างโดยเฉพาะ ดูhttp://dev.mysql.com/doc/refman/5.7/en/fulltext-restrictions.htmlและhttp://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html
SPATIAL
: stackoverflow.com/questions/2256364/ …