ในระหว่างการเลือก SQL DB จะอ้างถึงข้อมูลเมตาสำหรับตารางเสมอไม่ว่าจะเป็น SELECT * สำหรับ SELECT a, b, c ... ทำไม? นั่นคือที่ที่ข้อมูลเกี่ยวกับโครงสร้างและรูปแบบของตารางบนระบบอยู่
ต้องอ่านข้อมูลนี้ด้วยเหตุผลสองประการ หนึ่งเพื่อรวบรวมคำสั่ง ต้องแน่ใจว่าคุณระบุตารางที่มีอยู่อย่างน้อยที่สุด นอกจากนี้โครงสร้างฐานข้อมูลอาจมีการเปลี่ยนแปลงตั้งแต่ครั้งสุดท้ายที่มีการดำเนินการคำสั่ง
ตอนนี้เห็นได้ชัดว่าข้อมูลเมตา DB ถูกแคชไว้ในระบบ แต่ยังคงต้องดำเนินการประมวลผล
จากนั้นข้อมูลเมตาจะถูกใช้เพื่อสร้างแผนการสืบค้น สิ่งนี้เกิดขึ้นทุกครั้งที่มีการรวบรวมคำสั่งเช่นกัน อีกครั้งสิ่งนี้ทำงานกับข้อมูลเมตาที่แคชไว้ แต่ก็ทำได้เสมอ
ครั้งเดียวที่การประมวลผลนี้ไม่เสร็จสิ้นคือเมื่อฐานข้อมูลกำลังใช้แบบสอบถามที่คอมไพล์ไว้ล่วงหน้าหรือแคชแบบสอบถามก่อนหน้า นี่คืออาร์กิวเมนต์สำหรับการใช้พารามิเตอร์การรวมแทน SQL ตามตัวอักษร "SELECT * FROM TABLE WHERE key = 1" เป็นคำค้นหาที่แตกต่างจาก "SELECT * FROM TABLE WHERE key =?" และ "1" ถูกผูกไว้กับการโทร
ฐานข้อมูลพึ่งพาการแคชเพจเป็นอย่างมากในการทำงาน ฐานข้อมูลสมัยใหม่จำนวนมากมีขนาดเล็กพอที่จะบรรจุลงในหน่วยความจำได้อย่างสมบูรณ์ (หรือบางทีฉันควรจะบอกว่าหน่วยความจำสมัยใหม่มีขนาดใหญ่พอที่จะใส่ฐานข้อมูลจำนวนมากได้) จากนั้นต้นทุน I / O หลักของคุณที่ส่วนหลังคือการบันทึกและการล้างหน้า
อย่างไรก็ตามหากคุณยังคงกดดิสก์สำหรับ DB ของคุณการเพิ่มประสิทธิภาพหลักที่ทำโดยระบบจำนวนมากคือการพึ่งพาข้อมูลในดัชนีแทนที่จะใช้ตารางเอง
ถ้าคุณมี:
CREATE TABLE customer (
id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(150) NOT NULL,
city VARCHAR(30),
state VARCHAR(30),
zip VARCHAR(10));
CREATE INDEX k1_customer ON customer(id, name);
จากนั้นถ้าคุณทำ "SELECT id, name FROM customer WHERE id = 1" เป็นไปได้มากที่ DB ของคุณจะดึงข้อมูลนี้จากดัชนีแทนที่จะมาจากตาราง
ทำไม? มีแนวโน้มว่าจะใช้ดัชนีเพื่อตอบสนองการสืบค้น (เทียบกับการสแกนตาราง) และแม้ว่า "ชื่อ" จะไม่ได้ใช้ในส่วนคำสั่งที่ใด แต่ดัชนีนั้นก็ยังคงเป็นตัวเลือกที่ดีที่สุดสำหรับการสืบค้น
ตอนนี้ฐานข้อมูลมีข้อมูลทั้งหมดที่ต้องการเพื่อตอบสนองการสืบค้นดังนั้นจึงไม่มีเหตุผลที่จะตีหน้าตารางด้วยตนเอง การใช้ดัชนีจะส่งผลให้ปริมาณการใช้ดิสก์น้อยลงเนื่องจากคุณมีความหนาแน่นของแถวที่สูงกว่าในดัชนีเทียบกับตารางโดยทั่วไป
นี่คือคำอธิบายเกี่ยวกับเทคนิคการเพิ่มประสิทธิภาพเฉพาะที่ใช้โดยฐานข้อมูลบางแห่ง หลายคนมีเทคนิคการเพิ่มประสิทธิภาพและการปรับแต่งหลายอย่าง
ในท้ายที่สุด SELECT * มีประโยชน์สำหรับการสืบค้นแบบไดนามิกที่คุณต้องพิมพ์ด้วยมือฉันจะไม่ใช้สำหรับ "รหัสจริง" การระบุคอลัมน์แต่ละคอลัมน์ทำให้ DB มีข้อมูลเพิ่มเติมที่สามารถใช้เพื่อเพิ่มประสิทธิภาพการสืบค้นและช่วยให้คุณสามารถควบคุมโค้ดของคุณจากการเปลี่ยนแปลงสคีมาได้ดีขึ้นเป็นต้น
SELECT
ดำเนินการ / ประมวลผลแบบสอบถามจะแตกต่างจากฐานข้อมูลไปยังฐานข้อมูล