คืออะไรดัชนีใน SQL? คุณสามารถอธิบายหรืออ้างอิงเพื่อทำความเข้าใจได้อย่างชัดเจนหรือไม่
ฉันควรใช้ดัชนีที่ไหน
คืออะไรดัชนีใน SQL? คุณสามารถอธิบายหรืออ้างอิงเพื่อทำความเข้าใจได้อย่างชัดเจนหรือไม่
ฉันควรใช้ดัชนีที่ไหน
คำตอบ:
ดัชนีจะใช้เพื่อเร่งการค้นหาในฐานข้อมูล MySQL มีเอกสารที่ดีเกี่ยวกับเรื่องนี้ (ซึ่งเกี่ยวข้องกับเซิร์ฟเวอร์ SQL อื่น ๆ ด้วย): http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
ดัชนีสามารถใช้เพื่อค้นหาแถวทั้งหมดที่ตรงกับบางคอลัมน์ในคิวรีของคุณอย่างมีประสิทธิภาพจากนั้นดำเนินการเฉพาะส่วนย่อยของตารางเพื่อค้นหาการจับคู่ที่ตรงกัน หากคุณไม่มีดัชนีในคอลัมน์ใด ๆ ในWHERE
ประโยคSQL
เซิร์ฟเวอร์จะต้องผ่านทั้งตารางและตรวจสอบทุกแถวเพื่อดูว่าตรงหรือไม่ซึ่งอาจเป็นการทำงานที่ช้าในตารางขนาดใหญ่
ดัชนียังสามารถเป็นUNIQUE
ดัชนีซึ่งหมายความว่าคุณไม่สามารถมีค่าซ้ำกันในคอลัมน์นั้นหรือPRIMARY KEY
ในเครื่องมือเก็บข้อมูลบางตัวจะกำหนดว่าไฟล์เก็บค่าไว้ที่ใดในไฟล์ฐานข้อมูล
ใน MySQL คุณสามารถใช้EXPLAIN
หน้าSELECT
คำสั่งของคุณเพื่อดูว่าแบบสอบถามของคุณจะใช้ดัชนีใด ๆ นี่เป็นการเริ่มต้นที่ดีสำหรับการแก้ไขปัญหาประสิทธิภาพการทำงาน อ่านเพิ่มเติมได้ที่นี่:
http://dev.mysql.com/doc/refman/5.0/en/explain.html
ดัชนีคลัสเตอร์จะเหมือนกับเนื้อหาของสมุดโทรศัพท์ คุณสามารถเปิดหนังสือได้ที่ 'Hilditch, David' และค้นหาข้อมูลทั้งหมดของ Hilditch ที่อยู่ติดกัน นี่คือคีย์สำหรับดัชนีคลัสเตอร์คือ (นามสกุล, ชื่อจริง)
สิ่งนี้ทำให้ดัชนีคลัสเตอร์ที่ยอดเยี่ยมสำหรับการดึงข้อมูลจำนวนมากตามการสืบค้นตามช่วงเนื่องจากข้อมูลทั้งหมดอยู่ติดกัน
เนื่องจากดัชนีคลัสเตอร์เกี่ยวข้องกับวิธีการจัดเก็บข้อมูลจริงมีเพียงหนึ่งในนั้นที่เป็นไปได้ต่อตาราง (แม้ว่าคุณสามารถโกงเพื่อจำลองดัชนีหลายคลัสเตอร์ได้)
ดัชนีที่ไม่ทำคลัสเตอร์นั้นแตกต่างกันซึ่งคุณสามารถมีได้หลายดัชนีจากนั้นชี้ไปที่ข้อมูลในดัชนีคลัสเตอร์ คุณสามารถมีได้เช่นดัชนีที่ไม่ทำคลัสเตอร์ที่ด้านหลังของสมุดโทรศัพท์ซึ่งมีคีย์ (เมืองที่อยู่)
ลองนึกภาพถ้าคุณต้องค้นหาในสมุดโทรศัพท์สำหรับทุกคนที่อาศัยอยู่ใน 'ลอนดอน' - ด้วยดัชนีกลุ่มคุณจะต้องค้นหาทุกรายการในสมุดโทรศัพท์เนื่องจากคีย์บนดัชนีคลัสเตอร์อยู่ (นามสกุล, ชื่อจริง) และเป็นผลให้ผู้คนในลอนดอนกระจัดกระจายไปทั่วดัชนี
หากคุณมีดัชนีที่ไม่ใช่แบบคลัสเตอร์บน (เมือง) ดังนั้นคำสั่งเหล่านี้สามารถทำได้เร็วกว่า
หวังว่าจะช่วย!
การเปรียบเทียบที่ดีมากคือการคิดว่าดัชนีฐานข้อมูลเป็นดัชนีในหนังสือ หากคุณมีหนังสือเกี่ยวกับประเทศและคุณกำลังมองหาประเทศอินเดียแล้วทำไมคุณต้องอ่านหนังสือทั้งเล่ม - ซึ่งเทียบเท่ากับการสแกนแบบเต็มตารางในคำศัพท์ฐานข้อมูล - เมื่อคุณสามารถไปที่ดัชนีที่ด้านหลังของหนังสือ หนังสือซึ่งจะบอกคุณหน้าแน่นอนที่คุณสามารถหาข้อมูลเกี่ยวกับอินเดีย ในทำนองเดียวกันเมื่อดัชนีหนังสือมีหมายเลขหน้าดัชนีฐานข้อมูลจะมีตัวชี้ไปยังแถวที่มีค่าที่คุณกำลังค้นหาใน SQL ของคุณ
ดัชนีจะใช้เพื่อเพิ่มประสิทธิภาพการสืบค้น ทำได้โดยลดจำนวนหน้าข้อมูลฐานข้อมูลที่ต้องเข้าชม / สแกน
ใน SQL Server ดัชนีคลัสเตอร์จะกำหนดลำดับทางกายภาพของข้อมูลในตาราง สามารถมีดัชนีคลัสเตอร์เดียวได้ต่อตาราง (ดัชนีคลัสเตอร์คือตาราง) ดัชนีอื่น ๆ ทั้งหมดในตารางถูกเรียกว่าไม่ใช่คลัสเตอร์
ดัชนีมีทั้งหมดเกี่ยวกับการหาข้อมูลได้อย่างรวดเร็ว
ดัชนีในฐานข้อมูลนั้นคล้ายคลึงกับดัชนีที่คุณพบในหนังสือ หากหนังสือมีดัชนีและฉันขอให้คุณหาบทหนึ่งในหนังสือเล่มนั้นคุณสามารถค้นหาได้อย่างรวดเร็วด้วยความช่วยเหลือของดัชนี ในทางตรงกันข้ามถ้าหนังสือไม่มีดัชนีคุณจะต้องใช้เวลามากขึ้นในการค้นหาบทโดยดูจากทุกหน้าตั้งแต่ต้นจนจบหนังสือ
ในทำนองเดียวกันดัชนีในฐานข้อมูลสามารถช่วยให้ค้นหาข้อมูลได้อย่างรวดเร็ว หากคุณยังใหม่ต่อการจัดทำดัชนีวิดีโอต่อไปนี้มีประโยชน์มาก อันที่จริงฉันเรียนรู้มากมายจากพวกเขา
ข้อมูลพื้นฐานเกี่ยวกับดัชนีดัชนีแบบ
คลัสเตอร์และแบบไม่รวมกลุ่มดัชนีที่
ไม่ซ้ำใครและไม่ซ้ำ
ข้อดีและข้อเสียของดัชนี
B-tree
ดีในดัชนีทั่วไปเป็น ดัชนีมีสองประเภทคือแบบคลัสเตอร์และแบบไม่คลัสเตอร์
คลัสเตอร์ดัชนีสร้างใบสั่งทางกายภาพของแถว (มันสามารถมีได้เพียงหนึ่งและในกรณีส่วนใหญ่ก็ยังเป็นคีย์หลัก - ถ้าคุณสร้างคีย์หลักในตารางที่คุณสร้างดัชนีคลัสเตอร์บนโต๊ะนี้)
nonclusteredดัชนียังเป็นต้นไม้ไบนารี แต่ก็ไม่ได้สร้างคำสั่งซื้อทางกายภาพของแถว โหนดใบของดัชนีที่ไม่ได้คลัสเตอร์จะมี PK (ถ้ามี) หรือดัชนีแถว
ดัชนีใช้เพื่อเพิ่มความเร็วในการค้นหา เนื่องจากความซับซ้อนของ O (log N) ดัชนีมีขนาดใหญ่มากและน่าสนใจ ฉันสามารถพูดได้ว่าการสร้างดัชนีในฐานข้อมูลขนาดใหญ่บางครั้งก็เป็นงานศิลปะ
INDEXES
- เพื่อค้นหาข้อมูลได้อย่างง่ายดาย
UNIQUE INDEX
- ไม่อนุญาตให้ใช้ค่าซ้ำกัน
ไวยากรณ์สำหรับ INDEX
CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
ไวยากรณ์สำหรับ UNIQUE INDEX
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
ก่อนอื่นเราต้องเข้าใจว่าการสืบค้นแบบปกติ มันสำรวจผ่านแต่ละแถวทีละหนึ่งและเมื่อพบข้อมูลที่ส่งกลับ อ้างอิงภาพต่อไปนี้ (ภาพนี้ถ่ายจากวิดีโอนี้)
ดังนั้นสมมุติว่าการค้นหาคือ 50 มันจะต้องอ่าน 49 บันทึกเป็นการค้นหาเชิงเส้น
อ้างอิงภาพต่อไปนี้ (ภาพนี้ถ่ายจากวิดีโอนี้)
เมื่อเราใช้การจัดทำดัชนีแบบสอบถามจะค้นหาข้อมูลได้อย่างรวดเร็วโดยไม่ต้องอ่านแต่ละรายการเพียงแค่กำจัดข้อมูลครึ่งหนึ่งในการสำรวจเส้นทางเช่นการค้นหาแบบไบนารี ดัชนี mysql จะถูกเก็บไว้เป็น B-tree ซึ่งข้อมูลทั้งหมดอยู่ใน leaf node
INDEX เป็นเทคนิคการเพิ่มประสิทธิภาพที่เพิ่มความเร็วในกระบวนการดึงข้อมูล มันเป็นโครงสร้างข้อมูลถาวรที่เชื่อมโยงกับตาราง (หรือมุมมอง) เพื่อเพิ่มประสิทธิภาพในระหว่างการดึงข้อมูลจากตารางนั้น (หรือมุมมอง)
การค้นหาแบบอิงดัชนีจะถูกนำไปใช้มากขึ้นโดยเฉพาะเมื่อคำค้นหาของคุณมีตัวกรอง WHERE มิฉะนั้นเช่นแบบสอบถามโดยไม่มีตัวกรอง WHERE เลือกข้อมูลและกระบวนการทั้งหมด การค้นหาทั้งตารางโดยไม่มี INDEX เรียกว่า Table-scan
คุณจะพบข้อมูลที่แน่นอนสำหรับดัชนี SQL ในวิธีที่ชัดเจนและเชื่อถือได้: ตามลิงค์เหล่านี้:
ดัชนีจะใช้สำหรับเหตุผลที่แตกต่างกัน เหตุผลหลักคือเพื่อเพิ่มความเร็วในการสอบถามเพื่อให้คุณสามารถรับแถวหรือเรียงแถวได้เร็วขึ้น อีกเหตุผลหนึ่งคือการกำหนดคีย์หลักหรือดัชนีที่ไม่ซ้ำซึ่งจะรับประกันได้ว่าไม่มีคอลัมน์อื่น ๆ ที่มีค่าเดียวกัน
หากคุณใช้ SQL Server หนึ่งในแหล่งข้อมูลที่ดีที่สุดคือ Books Online ที่มาพร้อมกับการติดตั้ง! มันเป็นที่ 1 ที่ฉันจะอ้างถึงสำหรับหัวข้อใด ๆ ที่เกี่ยวข้องกับ SQL Server
ถ้าเป็นจริง "ฉันจะทำอย่างไรดี" ชนิดของคำถามแล้ว StackOverflow จะเป็นสถานที่ที่ดีกว่าที่จะถาม
นอกจากนี้ฉันยังไม่ได้กลับมาอีกซักพัก แต่ sqlservercentral.com เคยเป็นหนึ่งในเว็บไซต์ที่เกี่ยวข้องกับ SQL Server อันดับต้น ๆ
on-disk structure associated with a table or view that speeds retrieval of rows from the table or view
ดัชนีเป็น ดัชนีมีคีย์ที่สร้างขึ้นจากหนึ่งคอลัมน์ขึ้นไปในตารางหรือมุมมอง คีย์เหล่านี้ถูกเก็บไว้ในโครงสร้าง (ทรี B) ที่ช่วยให้ SQL Server สามารถค้นหาแถวหรือแถวที่เกี่ยวข้องกับค่าคีย์อย่างรวดเร็วและมีประสิทธิภาพ
Indexes are automatically created when PRIMARY KEY and UNIQUE constraints are defined on table columns. For example, when you create a table with a UNIQUE constraint, Database Engine automatically creates a nonclustered index.
หากคุณกำหนดค่าคีย์หลักเครื่องยนต์ฐานข้อมูลจะสร้างดัชนีคลัสเตอร์โดยอัตโนมัติเว้นแต่ดัชนีกลุ่มนั้นมีอยู่แล้ว เมื่อคุณพยายามที่จะบังคับใช้ข้อ จำกัด ของคีย์หลักบนตารางที่มีอยู่และดัชนีคลัสเตอร์ที่มีอยู่แล้วบนตารางนั้น SQL Server บังคับใช้คีย์หลักโดยใช้ดัชนีที่ไม่เป็นคลัสเตอร์
โปรดอ้างอิงถึงสิ่งนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับดัชนี (คลัสเตอร์และไม่ใช่คลัสเตอร์): https://docs.microsoft.com/en-us/sql/relational-database/indexes/clustered-and-nonclustered-indexes-described?view= SQL เซิร์ฟเวอร์ ver15
หวังว่านี่จะช่วยได้!