Selectivity จงมา!!! การจัดลำดับ Column บน Index


ห่างหายไปนานเลยนะครับ พอดีช่วงนี้งานเยอะมากเลยไม่มีเวลามาแบ่งปันข้อมูลสาระดีๆ กันเลย ก็วันนี้ผมจะนำเสนอเกี่ยวกับความสำคัญในการจัดลำดับก่อนหลังในการสร้าง index เพื่อให้ไปประสิทธิภาพที่ดีที่สุดมาฝากกันครับ

จากบทความเก่าที่ผมเคยเขียนเกี่ยวกับค่า Selectivity บน Column หรือค่าเฉพาะ (Distinct value) นั้นสำคัญมากสำหรับการสร้าง Index ที่ดี ยิ่งมีค่าเฉพาะมากหรือเท่ากับจำนวนบรรทัด นั่นเท่ากับค่า Selectivity ที่เท่ากับ 100% และเราจะได้รับประสิทธิภาพเต็มที่จาก Index ตัวนั้นๆ

Continue Reading

Advertisements

Adaptive direct path read บน Oracle 11g คืออะไร?


สวัสดีครับ! ก็ไม่ได้เขียนบทความซะนานต้องขออภัยจริงๆ เพราะว่าช่วงนี้งานโถมเข้าใส่แบบไม่ยั้ง ฮ่าๆ วันนี้เลยบอกตัวเองว่างานหนักยังไงก็ต้องเขียนบทความใหม่ให้ได้ โดยส่วนตัวถือเป็นความรู้ใหม่ของตัวเองด้วย เลยอยากให้ทุกคน(ที่เผลอเข้ามาอ่าน) ได้รับรู้ไปกับผมด้วยครับ และในวันนี้ผมจะพูดถึง Adaptive direct path read บน Oracle 11g มันคืออะไร? ดีหรือไม่อย่างไร? ลองอ่านกันดูครับ:)

Continue Reading

APPEND hint เคล็ด(ไม่)ลับสำหรับการ INSERT ข้อมูล


ไม่ได้เขียนบทความซะนานเลยครับ เนื่องจากช่วงหลังๆ มานี้งานค่อนข้างเยอะ วันนี้เลยเข้าเขียนบทความต่อจากคราวที่แล้วที่เราพูดถึงการใช้งาน NOLOGGING กันไป ซึ่งมันมีความเกี่ยวข้องกับ APPEND hint ที่ผมจะกล่าวถึงในวันนี้ครับ และจะมากล่าวคร่าวๆ กับวิธีการใช้งานด้วยครับ

APPEND hint มีผลต่อประสิทธิภาพอย่างไร?

โดยวิธีการทำงานของ APPEND hint นั้นมันจะทำการ insert ข้อมูลโดยตรงลงบน data files ซึ่งจะทำให้ประสิทธิภาพในการ INSERT … SELECT ดีขึ้นดังนี้

Continue Reading

ว่าด้วยเรื่องของ NOLOGGING กับการใช้งาน


NOLOGGING คืออะไร?

NOLOGGING คือ ออฟชั่นนึงบนตารางที่ช่วยทำให้การ INSERT หรือการสร้างอินเด็กซ์มีความเร็วมากขึ้นกว่าปกติ เป็นเพราะว่ามันจะไม่ทำการเขียน Redo log นั่นเอง แต่ความเร็วที่เพิ่มขึ้นก็ต้องแลกมาด้วยความอันตรายจากการใช้ NOLOGGING นั้น ถ้าในขณะนั้นฐานข้อมูลของคุณเกิดเหตุการณ์ไม่คาดคิดขึ้น แล้วคุณจำเป็นต้องกู้คืนข้อมูลผ่าน Archive log หรือแม้กระทั่ง Redo log ณ ตารางนั้นๆ จะไม่สามารถกู้ข้อมูลกลับมาได้ เพราะฉะนั้นจงใช้มันอย่างระมัดระวังมากที่สุดนะครับ

Continue Reading

Optimizer Hints อาวุธหนักในการ Tuning SQL


วันนี้เรามาทำความรู้จักกับ Optimizer hints กันครับ… เคยมั๊ยครับที่บางวันคิวรี่ก็ทำงานได้อย่างรวดเร็ว แต่บางวันก็ช้าเป็นเต่า? เคยมั๊ยครับที่เวลาคุณอัพเกรดระบบฐานข้อมูลจากเวอร์ชั่นเก่าเป็นเวอร์ชั่นใหม่แล้ว ทำไมคิวรี่มันถึงช้าลง? คุณเคยประสบปัญหาเหล่านี้หรือไม่ครับ? วันนี้ผมมีทางออกสำหรับปัญหาเหล่านี้ครับ นั่นก็คือพระเอกของเราวันนี้ “Optimizer Hints”

Continue Reading

SKEWONLY vs SIZE AUTO อะไรควรใช้ตอนไหน


เมื่อบทความที่แล้วผมได้พูดถึงตารางที่มีการเก็บ Histogram statistic และผลกระทบจากการใช้ Bind variable บนตารางนั้นๆ ไปแล้ว ถ้าใครมีคำถามสงสัยก็ลองถามเข้ามาได้ครับ แต่ในวันนี้ผมจะเล่าถึง Option นึงเกี่ยวกับการ Gather statistic ที่ส่วนใหญ่มักจะมองข้ามความสำคัญไป นั่นก็คือ METHOD_OPT ครับ โดยส่วนใหญ่มักจะถูกใช้เป็นค่า Default (เฮ้ยๆ ช่างมันเถอะ gather stats แล้วก็โอเคแล้วมั่ง) ซึ่ง Default ที่ผมพูดถึงนั่นก็คือ “FOR ALL COLUMNS SIZE AUTO” ครับ (ในบทความนี้ผมขอเรียกสั้นๆ ว่า AUTO นะครับ และ “FOR ALL COLUMNS SIZE SKEWONLY” ซึ่งเป็นพระเอกของเราในวันนี้ ผมขอเรียกสั้นๆ ว่า SKEWONLY ครับ)

Continue Reading

Function-based index กับการใช้งานคอลัมน์ DATE


สำหรับวันนี้ผมจะมาทำจำลองเหตุการณ์ว่าทำไม? เมื่อเราใช้ TRUNC ฟังก์ชั่นบน DATE คอลัมน์ในคิวรี่แล้ว ทำไมคิวรี่ของเราจึงช้าลง ในขณะทีเราก็สร้างอินเด็กซ์บน DATE ไปให้แล้ว และในช่วงท้ายผมจะพูดถึงพระเอกของงานนี้นั้นคือ function-based index นั่นเองครับ เอาละครับมาเริ่มกันเลย
หนึ่งในสาเหตุสำหรับปัญหาเกี่ยวกับ SQL Statement ที่ได้พบได้เจอกันบ่อยๆ นั่นก็คือ Full table scan ซึ่งถูกกำหนดให้เป็น invalidating บน Index ใน SQL Statement ที่ WHERE clause ถูกเรียกใช้งาน Built-in function บน DATE column มาดูตัวอย่างกันครับ

Continue Reading