ไม่มีความแตกต่างในประสิทธิภาพ อย่างไรก็ตามคุณกำลังใช้สกีมาตอนนี้ (แม้ว่าคุณจะไม่รู้)
การใช้การอ้างอิงถึงวัตถุสคีมาเช่นตารางโพรซีเดอร์ที่เก็บไว้ UDF ฯลฯ ที่ไม่ผ่านการรับรองสคีมานั้นมีผลกระทบต่อประสิทธิภาพการทำงาน การอ้างอิงควรมีคุณสมบัติตามสคีมาเสมอ การอ้างอิงอย่างไม่มีเงื่อนไขดังกล่าวจะต้องได้รับการแก้ไขและสิ่งนี้เกิดขึ้นเช่นนี้:
- ขั้นแรกให้ค้นหาวัตถุที่มีชื่อและประเภทเดียวกันภายใต้สคีมาเริ่มต้นของผู้ใช้ที่มีการสร้างข้อมูลรับรอง (เช่น
jsmith
) หากพบว่ามีการใช้งานอินสแตนซ์นั้น
dbo
มิฉะนั้นมองหาวัตถุที่มีชื่อเดียวกันและประเภทภายใต้สคี ๆ
สิ่งนี้มีผลหลายอย่าง:
- โดยส่วนใหญ่แล้วการค้นหาสองรายการจำเป็นต้องแก้ไขการอ้างอิงมากกว่าการค้นหาครั้งเดียวที่จำเป็นหากการอ้างอิงนั้นผ่านการรับรองจากสคีมา
- แผนการดำเนินการที่ได้รับเมื่อการสืบค้น / กระบวนงานที่เก็บไว้ / ฟังก์ชันที่ผู้ใช้กำหนดถูกผูกไว้จะไม่สามารถแคชและนำกลับมาใช้ใหม่ได้
ผลสุดท้ายที่คุณจะพบได้เท่านั้น - อย่างเจ็บปวด - เมื่อมีอะไรบางอย่างแตกสลายคือผู้ใช้ที่แตกต่างกันอาจได้รับผลลัพธ์ที่แตกต่างจากการสืบค้นที่ระบุหรือขั้นตอนการจัดเก็บ สิ่งที่ชอบselect * from foo join bar
อาจทำงานได้ดีสำหรับฉันในฐานะเจ้าของ db; มันอาจจะเสียสำหรับผู้ใช้jsmith
ที่สร้างโดยไม่ตั้งใจหรือไม่สร้างตารางชื่อfoo
ภายใต้สคีของเขาเอง ( jsmith.foo
) ในฐานข้อมูลเดียวกัน
ด้วยเหตุผลนี้เช่นกันcreate
และdrop
ข้อความสั่งควรมีคุณสมบัติ schema-qualify ชื่อของวัตถุที่ถูกสร้างขึ้นหรือลดลง