คำถามติดแท็ก index

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

5
สถาปัตยกรรมดัชนีที่เหมาะสมคืออะไรเมื่อถูกบังคับให้ใช้ IsDeleted (การลบแบบอ่อน)?
ขณะนี้เรามีฐานข้อมูลและแอปพลิเคชันที่มีอยู่ซึ่งทำงานได้อย่างสมบูรณ์ ฉันไม่มีความสามารถในการเปลี่ยนสถาปัตยกรรม ณ จุดนี้ วันนี้แต่ละตารางในฐานข้อมูลมีฟิลด์ "IsDeleted" NOT NULL BIT ที่มีค่าเริ่มต้นเป็น '0' เมื่อแอปพลิเคชัน "ลบ" ข้อมูลมันเพียงอัปเดตการตั้งค่าสถานะ IsDeleted เป็น 1 สิ่งที่ฉันมีปัญหาในการทำความเข้าใจคือดัชนีของแต่ละตารางควรมีโครงสร้างอย่างไร ตอนนี้ทุกแบบสอบถาม / เข้าร่วม / ฯลฯ จะดำเนินการตรวจสอบ IsDeleted เป็นมาตรฐานที่นักพัฒนาของเราต้องปฏิบัติตาม ที่ถูกกล่าวว่าฉันพยายามที่จะตรวจสอบว่าดัชนีคีย์หลักคลัสเตอร์ทั้งหมดของฉันในแต่ละตารางจะต้องมีการเปลี่ยนแปลงเพื่อให้รวมถึงคีย์หลักและฟิลด์ BIT IsDeleted นอกจากนี้เนื่องจากทุกแบบสอบถาม / เข้าร่วม / ฯลฯ ต้องใช้การตรวจสอบ IsDeleted เป็นข้อสมมติฐานที่เหมาะสมหรือไม่ที่ดัชนีทุกเดียว (ไม่ใช่คลัสเตอร์ด้วย) ควรรวมเขตข้อมูล IsDeleted เป็นเขตข้อมูลแรกของดัชนีหรือไม่ อีกคำถามหนึ่งที่ฉันมีคือดัชนีรอบตัวกรอง ฉันเข้าใจว่าฉันสามารถใส่ตัวกรองในดัชนีเช่น "WHERE IsDeleted = 0" เพื่อลดขนาดของดัชนี อย่างไรก็ตามเนื่องจากการเข้าร่วม / …

3
ผลกระทบของดัชนีในคำสั่งการอัพเดทที่คอลัมน์อัพเดตไม่ได้อยู่ในดัชนี
ฉันตลอดเวลาเห็นคนบอกว่าดัชนีชะลอตัวลงupdate, และdelete insertสิ่งนี้ถูกใช้เป็นคำสั่งแบบครอบคลุมราวกับว่ามันเป็นค่าสัมบูรณ์ ในขณะที่ปรับฐานข้อมูลของฉันเพื่อปรับปรุงประสิทธิภาพฉันยังคงเจอกับสถานการณ์นี้ที่ขัดแย้งกับกฎอย่างมีเหตุผลสำหรับฉันและไม่มีที่ไหนที่ฉันสามารถหาใครพูดหรืออธิบายในทางใดทางหนึ่ง ใน SQL Server และฉันเชื่อ / เข้าใจ DBMS อื่น ๆ ส่วนใหญ่ดัชนีของคุณจะถูกสร้างขึ้นตามคอลัมน์เฉพาะที่คุณระบุ ส่วนแทรกและการลบจะมีผลกับทั้งแถวเสมอดังนั้นจึงไม่มีวิธีที่จะไม่ส่งผลกระทบต่อดัชนี แต่การปรับปรุงดูเหมือนจะมีความเป็นเอกลักษณ์มากกว่านี้เล็กน้อย หากฉันมีคอลัมน์ที่ไม่รวมอยู่ในดัชนีใด ๆ และฉันอัปเดตพวกเขาจะชะลอตัวลงเพียงเพราะฉันมีดัชนีในคอลัมน์อื่น ๆ ในตารางนั้นหรือไม่ ตัวอย่างเช่นพูดในUserตารางของฉันฉันมีหนึ่งหรือสองดัชนีคีย์หลักซึ่งเป็นคอลัมน์ Identity / Auto เพิ่มคอลัมน์และอาจอื่นในคอลัมน์บางคีย์ต่างประเทศ หากฉันอัปเดตคอลัมน์ที่ไม่มีดัชนีโดยตรงเช่นพูดว่าหมายเลขโทรศัพท์หรือที่อยู่การอัปเดตนี้จะช้าลงเพราะฉันมีดัชนีในตารางนี้ในคอลัมน์อื่น ๆ ในสถานการณ์ใดสถานการณ์หนึ่งหรือไม่ คอลัมน์ที่ฉันกำลังอัปเดตไม่ได้อยู่ในดัชนีดังนั้นเหตุผลที่ควรอัปเดตดัชนีไม่ควรใช่ไหม ถ้ามีอะไรฉันคิดว่ามันจะถูกเร่งถ้าฉันใช้ดัชนีในส่วนคำสั่ง WHERE

1
วางดัชนีที่ไม่ได้ใช้ - ประเมินอันตรายที่ไม่คาดคิด
เรามีฐานข้อมูลขนาดใหญ่มากที่มีดัชนีที่ไม่ได้ใช้หลายร้อยตามสถิติ DMV ซึ่งได้รับการสะสมตั้งแต่เซิร์ฟเวอร์รีบูตครั้งล่าสุดในเดือนกรกฎาคม หนึ่งใน DBA ของเราทำข้อความเตือนต่อไปนี้ซึ่งไม่สมเหตุสมผลสำหรับฉัน: ก่อนที่เราจะวางดัชนีเราจำเป็นต้องตรวจสอบให้แน่ใจว่ามันไม่ได้บังคับใช้ข้อ จำกัด ที่ไม่ซ้ำกันเนื่องจากเครื่องมือเพิ่มประสิทธิภาพการสืบค้นอาจต้องมีดัชนีนี้อยู่ เมื่อใดก็ตามที่มีการสร้างดัชนีสถิติที่เกี่ยวข้องกับดัชนีนั้นจะถูกสร้างขึ้นใน SQL Server ด้วย แบบสอบถามอาจไม่ได้ใช้ดัชนี แต่อาจใช้สถิติของแบบสอบถาม ดังนั้นเราอาจพบสถานการณ์หลังจากวางดัชนีประสิทธิภาพการสืบค้นเฉพาะจะแย่มาก SQL Server ไม่เก็บสถิติการใช้งานของสถิติ แม้ว่าเราจะเปิดใช้งานคุณลักษณะ "สร้างสถิติอัตโนมัติ" ในฐานข้อมูลของเรา แต่ฉันไม่ทราบว่าจะต้องทำตามพารามิเตอร์ทั้งหมดภายในใดก่อนที่เครื่องมือเพิ่มประสิทธิภาพการสืบค้นจะสร้างสถิติที่ขาดหายไป เกี่ยวกับ # 1 ฉันคิดว่า SQL Server จะทำการค้นหาดัชนีเพื่อตรวจสอบความเป็นเอกลักษณ์ก่อนที่จะทำการแทรก / อัพเดทดังนั้นดัชนีจะไม่แสดงว่าไม่ได้ใช้งาน เกี่ยวกับข้อที่ 2 เป็นไปได้จริงหรือ โดยวิธีเมื่อฉันบอกว่าดัชนีไม่ได้ใช้ฉันหมายถึงไม่มีการค้นหาและไม่มีการสแกน
16 sql-server  index 

3
มีประโยชน์ใด ๆ ในการจัดเรียงข้อมูลดัชนี SQL ในสภาพแวดล้อม SAN หรือไม่?
เซิร์ฟเวอร์ SQL ของเราใช้งาน SAN มันมีฐานข้อมูล OLTP หลายสิบบางตัวมีหลายตารางที่มีมากกว่า 1m บันทึก เรารันสคริปต์บำรุงรักษาดัชนีของ Ola Hallengrenทุกสัปดาห์และทำงานเป็นเวลาหลายชั่วโมงในแต่ละครั้ง ขึ้นอยู่กับเกณฑ์การกระจายตัวของสคริปต์จะจัดระเบียบใหม่หรือดัชนีดัชนีใหม่ เราสังเกตว่าในระหว่างการทำดัชนีใหม่ไฟล์บันทึกจะมีขนาดใหญ่ซึ่งนำไปสู่การสิ้นเปลืองแบนด์วิธที่มากเกินไปในระหว่างการจัดส่งบันทึก จากนั้นบทความจาก Brent Ozar ซึ่งเขาบอกว่าจะหยุดกังวลเกี่ยวกับดัชนี SQL : ฮาร์ดไดรฟ์ของคุณแชร์กับเซิร์ฟเวอร์อื่น ๆ ที่กำลังส่งคำขอไดรฟ์ในเวลาเดียวกันดังนั้นไดรฟ์จะกระโดดไปทั่วเพื่อรับข้อมูล การดีแฟรกดัชนีของคุณเป็นงานยุ่งที่ไร้ความหมาย Googling คำถามนี้นำไปสู่ความคิดเห็นที่แตกต่างกันส่วนใหญ่สนับสนุนด้วยการขัดแย้งที่ดูเหมือนสั้นหรืออ่อนแอเกินไป แผนเบื้องต้นของเราคือการปรับเปลี่ยนเกณฑ์การแตกแฟรกเมนต์ในสคริปต์การบำรุงรักษาของเราเพื่อให้การจัดระเบียบใหม่บ่อยกว่าการจัดทำดัชนีใหม่ คำตัดสินสุดท้ายคืออะไร? มันคุ้มค่าหรือไม่ที่จะจัดเรียงดัชนี SQL บน SAN โดยพิจารณาภาระที่เกี่ยวข้องกับการรันงานบำรุงรักษารายสัปดาห์

2
ดัชนีในคีย์หลักไม่ได้ใช้ในการเข้าร่วมง่าย
ฉันมีคำนิยามตารางและดัชนีต่อไปนี้: CREATE TABLE munkalap ( munkalap_id serial PRIMARY KEY, ... ); CREATE TABLE munkalap_lepes ( munkalap_lepes_id serial PRIMARY KEY, munkalap_id integer REFERENCES munkalap (munkalap_id), ... ); CREATE INDEX idx_munkalap_lepes_munkalap_id ON munkalap_lepes (munkalap_id); ทำไมไม่มีดัชนีใน munkalap_id ที่ใช้ในการสืบค้นต่อไปนี้? EXPLAIN ANALYZE SELECT ml.* FROM munkalap m JOIN munkalap_lepes ml USING (munkalap_id); QUERY PLAN Hash …

1
ฐานข้อมูลเก็บค่าคีย์ดัชนี (บนดิสก์) สำหรับฟิลด์ความยาวผันแปรได้อย่างไร
บริบท คำถามนี้เกี่ยวข้องกับรายละเอียดการใช้งานระดับต่ำของดัชนีในระบบฐานข้อมูล SQL และ NoSQL โครงสร้างที่แท้จริงของดัชนี (B + tree, hash, SSTable และอื่น ๆ ) นั้นไม่เกี่ยวข้องเนื่องจากคำถามนั้นเกี่ยวข้องกับคีย์ที่เก็บอยู่ในโหนดเดียวของการใช้งานเหล่านั้น พื้นหลัง ใน SQL (เช่น MySQL) และ NoSQL (CouchDB, MongoDB, ฯลฯ ) ฐานข้อมูลเมื่อคุณสร้างดัชนีในคอลัมน์หรือสาขาเอกสาร JSON ของข้อมูลสิ่งที่คุณกำลังจริงทำให้เกิดฐานข้อมูลในการทำคือการสร้างหลักรายการที่เรียงลำดับทั้งหมด ค่าเหล่านั้นพร้อมกับไฟล์ออฟเซ็ตลงในไฟล์ข้อมูลหลักที่บันทึกที่เกี่ยวข้องกับค่านั้นอยู่ (เพราะความเรียบง่ายฉันอาจโบกมือให้รายละเอียดที่ลึกลับอื่น ๆ ของความหมายเฉพาะ) ตัวอย่าง SQL แบบง่าย ๆ พิจารณาตาราง SQL มาตรฐานที่มีคีย์หลักแบบง่าย 32 บิตที่เราสร้างดัชนีในเราจะจบลงด้วยดัชนีบนดิสก์ของคีย์จำนวนเต็มเรียงและเชื่อมโยงกับออฟเซต 64 บิตลงในไฟล์ข้อมูลที่ บันทึกชีวิตเช่น: id | offset -------------- 1 …
16 mongodb  index  nosql  couchdb 

5
เมื่อใดควรจัดทำดัชนีที่ไม่เป็นคลัสเตอร์ในกลุ่มไฟล์แยกกัน
ฉันได้ยินมาว่าการจัดเก็บดัชนีในกลุ่มไฟล์และไดรฟ์เพิ่มประสิทธิภาพในฐานข้อมูลเนื่องจากไดรฟ์ไม่จำเป็นต้องย้อนกลับไปมาระหว่างดัชนีและข้อมูลที่ดัชนีอ้างอิง ฉันเคยได้ยินเช่นกันว่านี่เป็นตำนาน เมื่อใดควรเลือกที่จะจัดเก็บดัชนีที่ไม่ได้เป็นคลัสเตอร์ในกลุ่มไฟล์และไดรฟ์ที่แยกต่างหาก หลักฐานของ perfmon / profiler ใดที่ทำให้ฉันได้ข้อสรุปนั้น ฮาร์ดแวร์มีบทบาทในการตัดสินใจ (ไม่ว่าจะใช้ RAID / SAN บนไดรฟ์เดียวหรือไม่)
16 sql-server  index 

2
SQL Server 2008 - ดัชนีการแบ่งพาร์ติชันและคลัสเตอร์
ดังนั้นให้ฉันนำหน้าด้วยการบอกว่าฉันไม่สามารถควบคุมการออกแบบฐานข้อมูลของฉันได้ทั้งหมดดังนั้นแง่มุมมากมายของระบบปัจจุบันจึงไม่สามารถเปลี่ยนแปลงได้ตามวัตถุประสงค์ของสถานการณ์นี้ ความคิดเห็นเกี่ยวกับวิธีที่เราคิดใหม่แง่มุมของการออกแบบน่าจะถูกต้อง แต่ไม่ช่วยเหลือ :) ฉันมีตารางที่มีขนาดใหญ่มากกว้างประมาณ 150 ฟิลด์และแถวประมาณ 600 ม. ซึ่งขับเคลื่อนกระบวนการจำนวนมาก นี่คือสถานการณ์ในคลังข้อมูลดังนั้นเราจึงไม่มีการอัปเดต / แทรกใด ๆ นอกกระบวนการโหลดตามกำหนดเวลาดังนั้นจึงมีการจัดทำดัชนีอย่างหนัก มีการตัดสินใจที่จะลองแบ่งพาร์ติชันตารางนี้และฉันมีความกังวลเกี่ยวกับการทำดัชนีตารางที่แบ่งพาร์ติชัน ฉันไม่มีประสบการณ์ในการแบ่งพาร์ติชันดังนั้นอินพุตหรือลิงก์ใด ๆ ที่ชื่นชม ฉันไม่สามารถค้นหาสิ่งที่ฉันเป็นบน BOL หรือ msdn โดยเฉพาะได้ ขณะนี้เราจัดกลุ่มในฟิลด์ที่เราจะเรียกIncidentKeyซึ่งเป็นvarchar(50)และไม่ซ้ำกัน - เราสามารถมีได้ระหว่าง 1-100 รายการด้วยเหมือนกันIK(ไม่มีความคิดเห็นโปรด) เรามักจะได้รับข้อมูลใหม่ในIncidentKeyบันทึกเก่า ๆดังนั้นจึงไม่ต่อเนื่องกัน ฉันเข้าใจว่าฉันต้องรวมฟิลด์พาร์ติชันIncidentDateของฉันไว้ในคีย์ดัชนีคลัสเตอร์เพื่อให้พาร์ติชันทำงานได้อย่างถูกต้อง IncidentKey, IncidentDateฉันคิดว่ามันจะเป็น คำถามคือกลไกของดัชนีแบบคลัสเตอร์จะทำงานกับคีย์ 2 ส่วนในตารางที่แบ่งพาร์ติชันได้อย่างไรหากเร็กคอร์ดในพาร์ติชัน "ใหม่" ควรอยู่หน้าเร็กคอร์ดในพาร์ติชัน "เก่า" ในดัชนีคลัสเตอร์ ตัวอย่างเช่นฉันมี 5 บันทึก: IncidentKey Date ABC123 1/1/2010 ABC123 7/1/2010 …

1
คีย์หลักคอมโพสิตในฐานข้อมูล SQL Server แบบหลายผู้เช่า
ฉันกำลังสร้างแอพหลายผู้เช่า (ฐานข้อมูลเดียวสกีมาเดียว) โดยใช้ ASP Web API, Entity Framework และฐานข้อมูล SQL Server / Azure แอปนี้จะใช้งานโดยลูกค้า 1,000-5,000 คน ตารางทั้งหมดจะมีฟิลด์TenantId(Guid / UNIQUEIDENTIFIER) ตอนนี้ฉันใช้คีย์หลักของฟิลด์เดียวซึ่งเป็นรหัส (Guid) แต่ด้วยการใช้เพียงแค่รหัสเขตข้อมูลฉันต้องตรวจสอบว่าข้อมูลที่ให้โดยผู้ใช้นั้นมาจาก / สำหรับผู้เช่าที่เหมาะสมหรือไม่ ตัวอย่างเช่นฉันมีSalesOrderตารางที่มีCustomerIdเขตข้อมูล ทุกครั้งที่ผู้ใช้โพสต์ / อัปเดตคำสั่งขายฉันต้องตรวจสอบว่าCustomerIdมาจากผู้เช่ารายเดียวกันหรือไม่ แย่ลงเพราะผู้เช่าแต่ละรายอาจมีหลายสาขา แล้วฉันจะมีการตรวจสอบและTenantId OutletIdมันเป็นฝันร้ายของการบำรุงรักษาและไม่ดีต่อประสิทธิภาพ ฉันคิดว่าจะเพิ่มไปยังคีย์หลักพร้อมกับTenantId Idและอาจเพิ่มOutletIdด้วย ดังนั้นหลักสำคัญในSalesOrderตารางจะเป็น: Id, และTenantId OutletIdข้อเสียของวิธีการนี้คืออะไร? ประสิทธิภาพจะเจ็บอย่างรุนแรงโดยใช้คีย์ผสมหรือไม่ คีย์ใบสั่งผสมมีความสำคัญหรือไม่ มีวิธีแก้ปัญหาที่ดีกว่าสำหรับฉันหรือไม่?

5
ความพยายามในการเรียกคืนพื้นที่ที่ไม่ได้ใช้ทำให้พื้นที่ใช้งานเพิ่มขึ้นอย่างมากใน SQL Server
ฉันมีตารางในฐานข้อมูลการผลิตที่มีขนาด 525 GB ซึ่งไม่ได้ใช้ 383 GB: ฉันต้องการเรียกคืนพื้นที่บางส่วนนี้ แต่ก่อนที่จะยุ่งกับฐานข้อมูลการผลิตฉันกำลังทดสอบกลยุทธ์บางอย่างในตารางที่เหมือนกันในฐานข้อมูลทดสอบที่มีข้อมูลน้อยลง ตารางนี้มีปัญหาที่คล้ายกัน: ข้อมูลบางอย่างเกี่ยวกับตาราง: ปัจจัยเติมถูกตั้งค่าเป็น 0 มีประมาณ 30 คอลัมน์ หนึ่งในคอลัมน์คือ LOB ของรูปภาพประเภทและมันจัดเก็บไฟล์ที่มีขนาดตั้งแต่ไม่กี่ KB ถึงหลายร้อย MB ตารางนี้ไม่มีดัชนีสมมุติฐานที่เกี่ยวข้อง เซิร์ฟเวอร์กำลังเรียกใช้ SQL Server 2017 (RTM-GDR) (KB4505224) - 14.0.2027.2 (X64) ฐานข้อมูลใช้SIMPLEโมเดลการกู้คืน บางสิ่งที่ฉันได้ลอง: ALTER INDEX ALL ON dbo.MyTable REBUILDสร้างใหม่ดัชนี: สิ่งนี้มีผลกระทบเล็กน้อย ALTER INDEX ALL ON dbo.MyTable REORGANIZE WITH(LOB_COMPACTION = ON)จัดระเบียบดัชนี: สิ่งนี้มีผลกระทบเล็กน้อย …

1
แผนการดำเนินการที่มีดัชนีหายไปหลายรายการ
หากคุณเรียกใช้แบบสอบถามด้วย 'รวมแผนการดำเนินการตามจริง' แผนจะแนะนำดัชนีที่ขาดหายไปด้วย รายละเอียดดัชนีอยู่ภายในMissingIndexesแท็กใน XML มีสถานการณ์หรือไม่เมื่อแผนมีข้อเสนอแนะหลายดัชนี? ฉันลองใช้คำสั่ง sql ที่แตกต่างกัน แต่ไม่สามารถหาข้อสงสัยใด ๆ ที่สร้างดัชนีที่ขาดหายไปสองรายการขึ้นไป

2
ดัชนีในคอลัมน์ที่คำนวณแล้วยังไม่สามารถค้นหาได้
ฉันมีตารางเรียกว่ามีคอลัมน์คำนวณยังคงเรียกว่าAddress Hashkeyคอลัมน์นั้นถูกกำหนดไว้แล้ว แต่ไม่แม่นยำ มันมีดัชนีที่เป็นเอกลักษณ์ของมันที่ไม่สามารถหาได้ ถ้าฉันเรียกใช้แบบสอบถามนี้คืนคีย์หลัก: SELECT @ADDRESSID= ISNULL(AddressId,0) FROM dbo.[Address] WHERE HashKey = @HashKey ฉันได้รับแผนนี้: ถ้าฉันบังคับดัชนีฉันจะได้รับสิ่งนี้ยิ่งแย่ลง: ถ้าฉันพยายามและบังคับทั้งดัชนีและการค้นหาฉันได้รับข้อผิดพลาด: ตัวประมวลผลแบบสอบถามไม่สามารถสร้างแผนแบบสอบถามได้เนื่องจากคำแนะนำที่กำหนดไว้ในแบบสอบถามนี้ ส่งแบบสอบถามอีกครั้งโดยไม่ระบุคำแนะนำใด ๆ และไม่ใช้SET FORCEPLAN นี่เป็นเพียงเพราะมันไม่แม่นยำใช่ไหม ฉันคิดว่าไม่สำคัญว่ามันจะยังคงอยู่หรือไม่? มีวิธีทำให้ดัชนีนี้ค้นหาได้โดยไม่ทำให้คอลัมน์นี้ไม่คำนวณหรือไม่ ใครบ้างมีลิงค์ไปยังข้อมูลเกี่ยวกับเรื่องนี้? ฉันไม่สามารถโพสต์การสร้างตารางจริง แต่นี่เป็นตารางทดสอบที่มีปัญหาเดียวกัน: drop TABLE [dbo].[Test] CREATE TABLE [dbo].[Test] ( [test] [VARCHAR](100) NULL, [TestGeocode] [geography] NULL, [Hashkey] AS CAST( ( hashbytes ('SHA', ( RIGHT(REPLICATE(' ', …

3
ดัชนีสำหรับเคียวรี SQL ที่มีเงื่อนไข WHERE และ GROUP BY
ฉันพยายามที่จะกำหนดดัชนีที่จะใช้สำหรับแบบสอบถาม SQL ที่มีWHEREเงื่อนไขและGROUP BYที่กำลังทำงานช้ามาก คำค้นหาของฉัน: SELECT group_id FROM counter WHERE ts between timestamp '2014-03-02 00:00:00.0' and timestamp '2014-03-05 12:00:00.0' GROUP BY group_id ปัจจุบันตารางมี 32.000.000 แถว เวลาดำเนินการของแบบสอบถามเพิ่มขึ้นมากเมื่อฉันเพิ่มกรอบเวลา ตารางที่สงสัยจะเป็นดังนี้: CREATE TABLE counter ( id bigserial PRIMARY KEY , ts timestamp NOT NULL , group_id bigint NOT NULL ); ขณะนี้ฉันมีดัชนีต่อไปนี้ แต่ประสิทธิภาพยังคงช้า: CREATE INDEX …

2
ดัชนีต้องครอบคลุมคอลัมน์ที่เลือกทั้งหมดเพื่อให้ ORDER BY ใช้หรือไม่
เมื่อเร็ว ๆ นี้ที่บางคนถามว่าทำไมไม่สั่งโดยใช้ดัชนี? สถานการณ์เกี่ยวข้องกับตาราง InnoDB อย่างง่ายใน MySQL ประกอบด้วยสามคอลัมน์และ 10k แถว หนึ่งในคอลัมน์เป็นจำนวนเต็มถูกทำดัชนี - และ OP พยายามดึงตารางทั้งหมดของเขาที่เรียงลำดับในคอลัมน์นั้น: SELECT * FROM person ORDER BY age เขาแนบEXPLAINเอาท์พุทแสดงว่าแบบสอบถามนี้ได้รับการแก้ไขด้วยfilesort(แทนที่จะเป็นดัชนี) และถามว่าทำไมจึงเป็นเช่นนั้น แม้จะมีคำใบ้ FORCE INDEX FOR ORDER BY (age) ที่ก่อให้เกิดดัชนีที่จะใช้ , คนตอบ (กับการสนับสนุนความเห็น / upvotes จากคนอื่น ๆ ) ว่าดัชนีจะใช้เฉพาะสำหรับการเรียงลำดับเมื่อคอลัมน์ที่เลือกจะอ่านทั้งหมดจากดัชนี (เช่นเป็นปกติจะระบุโดยUsing indexในExtraคอลัมน์ ของEXPLAINเอาท์พุท) คำอธิบายที่ได้รับในภายหลังว่าภายในดัชนีแล้วเรียกคอลัมน์จากผลตารางในการสุ่ม I / O filesortซึ่งมุมมองที่เป็นราคาแพงกว่า สิ่งนี้ดูเหมือนจะปรากฏในหน้าของบทที่เกี่ยวกับORDER …
15 mysql  index  innodb  order-by 

5
การจัดทำดัชนีตั้งแต่เริ่มต้นหรือเมื่อเกิดปัญหาประสิทธิภาพ
คำถามของฉันเกี่ยวกับการใช้ดัชนี ฉันควรเริ่มต้นสร้างดัชนีตั้งแต่เริ่มต้นหรือเมื่อมีปัญหาเรื่องประสิทธิภาพหรือไม่ นอกจากนี้เรายังสามารถสร้างดัชนีชั่วคราวขณะดำเนินการค้นหา อะไรคือข้อดีข้อเสียของเทคนิคดังกล่าว?

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