ทำความเข้าใจความต้องการของคุณก่อนที่จะออกแบบสคีมา (ถ้าเป็นไปได้)
เรียนรู้เกี่ยวกับข้อมูล 1) การจัดทำดัชนี 2) ประเภทของที่เก็บข้อมูลที่ใช้ 3) เครื่องมือหรือคุณลักษณะของผู้ขาย เช่น ... แคชความสามารถในหน่วยความจำ 4) ประเภทข้อมูล 5) ขนาดของตาราง 6) ความถี่ของแบบสอบถาม 7) เวิร์กโหลดที่เกี่ยวข้องหากทรัพยากรถูกแชร์ 8) การทดสอบ
A) ข้อกำหนดจะแตกต่างกันไป หากฮาร์ดแวร์ไม่สามารถรองรับปริมาณงานที่ต้องการคุณควรประเมินวิธีการจัดทำข้อกำหนดในปริมาณงานใหม่ เกี่ยวกับคอลัมน์เพิ่มเข้ากับตาราง หากฐานข้อมูลรองรับมุมมองคุณสามารถสร้างมุมมองที่จัดทำดัชนี (?) ของข้อมูลเฉพาะด้วยคอลัมน์ที่มีชื่อเฉพาะ (เทียบกับเลือก '*') ตรวจสอบข้อมูลและสคีมาของคุณเป็นระยะเพื่อให้แน่ใจว่าคุณจะไม่พบกลุ่มอาการของ "ขยะ" -> "ขยะ"
สมมติว่าไม่มีวิธีแก้ปัญหาอื่น คุณสามารถพิจารณาสิ่งต่อไปนี้ มีวิธีแก้ไขปัญหาอยู่เสมอ
1) การจัดทำดัชนี: ตัวเลือก * จะเรียกใช้งาน tablescan ขึ้นอยู่กับปัจจัยต่าง ๆ สิ่งนี้อาจเกี่ยวข้องกับการค้นหาดิสก์และ / หรือการช่วงชิงกับการสอบถามอื่น ๆ หากตารางนั้นมีหลายวัตถุประสงค์ให้ตรวจสอบให้แน่ใจว่าแบบสอบถามทั้งหมดนั้นมีประสิทธิภาพและดำเนินการด้านล่างตามเวลาเป้าหมาย หากมีข้อมูลจำนวนมากและเครือข่ายของคุณหรือทรัพยากรอื่น ๆ ไม่ได้รับการปรับจูน คุณต้องคำนึงถึงสิ่งนี้ด้วย ฐานข้อมูลเป็นสภาพแวดล้อมที่ใช้ร่วมกัน
2) ประเภทของการจัดเก็บ เช่น: ถ้าคุณใช้ SSD, ดิสก์หรือหน่วยความจำ I / O ครั้งและโหลดบนระบบ / cpu จะแตกต่างกันไป
3) DBA สามารถปรับฐานข้อมูล / ตารางเพื่อประสิทธิภาพที่สูงขึ้นได้หรือไม่? ด้วยเหตุผลใดก็ตามทีมได้ตัดสินใจเลือก '*' เป็นทางออกที่ดีที่สุดสำหรับปัญหา สามารถโหลดฐานข้อมูลหรือตารางลงในหน่วยความจำได้ (หรือวิธีอื่น ๆ ... การตอบสนองอาจถูกออกแบบมาเพื่อตอบสนองด้วยความล่าช้า 2-3 วินาที --- ในขณะที่โฆษณาเล่นเพื่อสร้างรายได้ให้ บริษัท ... )
4) เริ่มต้นที่พื้นฐาน ทำความเข้าใจกับชนิดข้อมูลของคุณและวิธีการนำเสนอผลลัพธ์ ประเภทข้อมูลขนาดเล็กจำนวนฟิลด์ลดจำนวนข้อมูลที่ส่งคืนในชุดผลลัพธ์ สิ่งนี้ทำให้รีซอร์สพร้อมใช้งานสำหรับความต้องการของระบบอื่น ทรัพยากรระบบมักจะมีขีด จำกัด ทำงาน 'เสมอ' ต่ำกว่าขีด จำกัด เหล่านี้เพื่อให้มั่นใจเสถียรภาพและพฤติกรรมที่คาดการณ์ได้
5) ขนาดของตาราง / ข้อมูล select '*' เป็นเรื่องปกติกับตารางเล็ก ๆ โดยทั่วไปจะพอดีกับหน่วยความจำและเวลาตอบสนองรวดเร็ว อีกครั้ง .... ตรวจสอบความต้องการของคุณ วางแผนสำหรับฟีเจอร์คืบ; วางแผนความต้องการในปัจจุบันและอนาคตที่เป็นไปได้เสมอ
6) ความถี่ของแบบสอบถาม / แบบสอบถาม ระวังภาระงานอื่น ๆ ในระบบ หากเคียวรีนี้ดับทุกวินาทีและตารางจะเล็ก ชุดผลลัพธ์สามารถออกแบบให้อยู่ในแคช / หน่วยความจำได้ อย่างไรก็ตามหากแบบสอบถามเป็นกระบวนการแบตช์บ่อยครั้งที่มีข้อมูลกิกะไบต์ / เทราไบต์ ... คุณอาจดีกว่าที่จะอุทิศทรัพยากรเพิ่มเติมเพื่อให้แน่ใจว่าปริมาณงานอื่น ๆ จะไม่ได้รับผลกระทบ
7) ปริมาณงานที่เกี่ยวข้อง ทำความเข้าใจวิธีการใช้ทรัพยากร เครือข่าย / ระบบ / ฐานข้อมูล / ตาราง / แอปพลิเคชันทุ่มเทหรือแชร์หรือไม่ ใครคือผู้มีส่วนได้เสีย? นี่สำหรับการผลิตการพัฒนาหรือ QA หรือไม่? นี่เป็น "การแก้ไขด่วน" ชั่วคราวหรือไม่ คุณทดสอบสถานการณ์แล้วหรือยัง? คุณจะประหลาดใจกับปัญหาที่มีอยู่บนฮาร์ดแวร์ปัจจุบันในปัจจุบัน (ใช่ประสิทธิภาพเร็ว ... แต่การออกแบบ / ประสิทธิภาพยังลดลง) ระบบจำเป็นต้องมีการค้นหา 10K ต่อวินาทีหรือ 5-10 แบบสอบถามต่อวินาที เป็นเซิร์ฟเวอร์ฐานข้อมูลเฉพาะหรือทำแอปพลิเคชันอื่น ๆ ตรวจสอบดำเนินการบนทรัพยากรที่ใช้ร่วมกัน แอปพลิเคชั่น / ภาษาบางอย่าง; O / S จะใช้หน่วยความจำ 100% ทำให้เกิดอาการ / ปัญหาต่าง ๆ
8) การทดสอบ: ทดสอบทฤษฎีของคุณและทำความเข้าใจให้มากที่สุด ปัญหา '*' ที่คุณเลือกอาจเป็นเรื่องใหญ่หรืออาจเป็นสิ่งที่คุณไม่ต้องกังวล
SELECT COUNT(*)
ความเป็นอยู่ที่ไม่ดีอย่างไม่น่าเชื่อเก่าและล้าสมัย สำหรับข้อมูลเกี่ยวกับSELECT *
- ดู: stackoverflow.com/questions/1960036/…