วันเสาร์ที่ 31 ตุลาคม พ.ศ. 2558

การเพิ่มประสิทธิภาพของ SQLite



  1.  จัดเก็บข้อมูลเท่าที่จำเป็นเท่านั้น เพราะในเวลาที่ประมวลผล SQLite ต้องอ่านและเขียนข้อมูลจากพื้นที่จัดเก็บทุกครั้ง ถ้ามีอ่านข้อมูลจำนวนน้อยๆ ข้อมูลนั้นจะอยู่หน่วยความจำซึ่งจะทำงานได้ประสิทธิภาพสูง
  2. พยายามหลีกเลี่ยงการใช้งาน ทรานแซ็คชั่น transaction เพราะการทำงานแต่ละคำสั่ง มีการอ่าน อ่านซ้ำ เขียนและจัดเก็บไฟล์ข้อมูลที่เปลี่ยนแปลง ซึ่งทำให้การทำงานช้ากว่าที่ไม่มีทรานแซ็คชั่น
  3. การสร้างดัชนีให้มีประสิทธิภาพ ดัชนีช่วยให้การค้นหาข้อมูลรวดเร็วขึ้น มีแนวทางพิจารณาต่อไปนี้
    • ดัชนีช่วยเพิ่มประสิทธิภาพในการอ่านข้อมูล ช่น คำสั่ง select แต่จะลดประสิทธิภาพในการแก้ไขข้อมูล ถ้าตารางมีการแก้ไขข้อมูลบ่อยอาจทำให้การทำงานช้าลง
    • ลำดับคอลัมน์ในดัชนีมีความสำคัญมา ควรเรียงตาม คอลัมน์ที่ใช้ในส่วน where  และควรเรียงลำดับตาม order by
    • ควรสร้างดัชนี ของทุกคอลัมน์ที่ใช้ค้นหา ( ในส่วน where หรือ join  )
    • ในกรณีที่สร้างดัชนีที่ไม่ซ้ำกัน เช่น primary key SQLite ทำงานได้รวดเร็วมาก เพราะดัชนีจะอ้างอิงกับข้อมูลในตารางโดยตรง
  4. ควรสร้างตารางให้เล็กที่สุด เพราะทำให้ประหยัดเนื้อจัดเก็บข้อมูล และทำให้การทำงานเร็วขึ้น
  5. การใช้ชนิดข้อมูล BLOB ใน SQLite จัดเก็บข้อมูลแยกออกจากข้อมูลอื่นๆในตาราง ถ้าข้อมูลที่ต้องจัดเก็บมีขนาดใหญ่มาก (มากกว่า 1 k ไบต์) ควรสร้างเป็นไฟล์ที่ใช้ในการจัดเก็บข้อมูลและจัดเก็บชื่อไฟล์ข้อมูลนั้นแทน เช่น ข้อมูลรูปภาพ บทความขนาดใหญ่
  6. ถ้าต้องการใช้ข้อมูลชั่วคราว และถูกลบอัตโนมัติทุกครั้งที่ รีสตาร์ทใหม่ ควรใช้คำสั่ง CREATE TEMP  แทน TABLE CREATE TABLE
  7. ควรเลี่ยงการใช้คำสั่งประเภท subquery ใน SQLite ทำงานโดยสร้างตารางชั่วคราวมาจัดเก็บข้อมูลก่อน ( ซึ่งต้องมีการอ่านเขียนไฟล์ ) ทำให้การทำงานช้าลง
  8. ควรใช้คำสั่ง VACUUM เพื่อจัดเรียงข้อมูลในฐานข้อมูลทุกครั้งที่มีการเปลี่ยนแปลงข้อมูลจำนวนมาก หรือเป็นระยะๆ คำสั่ง VACUUM ทำให้ไฟล์ฐานข้อมูลมีขนาดเล็กลงและทำงานเร็วขึ้น
  9. ลำดับคอลัมน์ในตารางมีความสำคัญมากต่อประสิทธิภาพการทำงานโดยรวม เพราะ SQLite จะทำค้นหาข้อมูลทีละคอลัมน์ตามลำดับใน schema ( ลำดับในคำสั่งสร้าง CREATE TABLE ) ดังนั้นควรเรียงตามความสำคัญในการค้นหาข้อมูลหรือใช้เป็นเงื่อนไขคำสั่งและควรมีเรียงลำดับความสำคัญและขนาดพื้นที่ข้อมูล  และข้อมูลที่มีขนาดใหญ่และไม่ได้ใช้ในเงื่อนไขการทำงานควรอยู่ลำดับท้ายๆๆฟฟๆฟฟๆ
จาก http://docs.blackberry.com/en/developers/deliverables/17952/BP_Optimizing_SQLite_database_performance_1219781_11.jsp

วันจันทร์ที่ 19 ตุลาคม พ.ศ. 2558

การใช้งาน sqlite เบื้องต้น

การใช้งาน sqlite เบื้องต้น

Sqlite เป็นโปรแกรมจัดการฐานข้อมูลที่มีขนาดเล็กมาก และเป็นที่นิยมในการพัฒนาฐานข้อมูลในมือถือทุกค่าย ซึ่งโปรแกรม sqlite รองรับภาษา sql และรองรับภาษาไทยด้วย แต่เนื่องจาก คู่มือภาษาไทยหายาก เลยเขียนให้เพื่อนเริ่มต้นได้รวดเร็วมากขึ้น ในคอมมานด์ไลน์ คำสั่งควบคุมระบบจะขึ้นต้นด้วยจุดตามด้วยคำสั่ง และผู้ใช้งานสามารถป้อนคำสั่ง sql ได้โดยมีเครื่องหมาย “;” ระบุว่าสิ้นสุดคำสั่ง
หลังจากโหลดโปรแกรม คอมมานด์ไลน์จาก www.sqlite.org  เราจะได้ไฟล์ sqlite3.exe มาหนึ่งไฟล์

การสร้างฐานข้อมูล

                คำสั่ง sqlite <ชื่อไฟล์ฐานข้อมูล> ตัวอย่างเช่น sqlite3 testdb.dbs
                ชื่อไฟล์ฐานข้อมูล เราสามารถกำหนดนามสกุลเองได้ และถ้าไม่มีนามสกุลก็ได้ จะอยู่โฟลเดอร์เดียวกับ sqlite3 ผู้ใช้งานสามารถกำหนดตำแหน่งไฟล์ได้ โดยระบุก่อนชื่อไฟล์ เช่น D:\database\testdb.dbs
การใช้เรียกใช้งาน sqlite3   และการเปิดฐานข้อมูล
                คำสั่ง .open <ชื่อไฟล์ฐานข้อมูล>
                โปรแกรม sqlite จะทำการปิดฐานข้อมูลที่ใช้งานอยู่และเปิดไฟล์ฐานข้อมูลใหม่ ผู้ใช้งานสามารถ พิมพ์คำสั่ง sql ได้โดยมีเครื่องหมาย “;” ระบุว่าสิ้นสุดคำสั่ง
หรือรันโปรแกรม sqlite3 พร้อมกับเปิดฐานข้อมูล
                คำสั่ง sqlite3 <ชื่อไฟล์ฐานข้อมูล>  ตัวอย่างเช่น sqlite3 testdb.dbs
              โปรแกรม sqlite3 จะตรวจสอบหาไฟล์ testdb.dbs และเปิดไฟล์มาอ่าน ซึ่งถ้าไม่พบไฟล์ที่ระบุ ระบบทำการสร้างฐานข้อมูลเปล่าและสร้างไฟล์ที่ระบุให้
              หมายเหตุ ถ้ารันโปรแกรม sqlite โดยไม่ระบุฐานข้อมูล โปรแกรมกำหนดให้สร้างฐานข้อมูลบนหน่วยความจำเครื่องทันที สามารถใช้คำสั่ง .save <ชื่อไฟล์> เพื่อบันทึกฐานข้อมูลในหน่วยความจำ

คำสั่งระบบที่ใช้บ่อย

                .open <ชื่อไฟล์ฐานข้อมูล> คำสั่งเปิดฐานข้อมูลที่ระบุ พร้อมปิดฐานข้อมูลก่อนหน้า
                .database คำสั่งแสดงรายชื่อฐานข้อมูลทั้งหมดในไฟล์ จะมี สองค่าเริ่มต้น คือ main เป็นชื่อที่กำหนดขึ้นถ้าไม่ระบุชื่อฐานข้อมูล และ temp ฐานข้อมูลทำงานขณะรันคำสั่ง sql

                .dbinfo <ชื่อฐานข้อมูล> คำสั่งแสดงรายละเอียดฐานข้อมูล ถ้าไม่ระบุชื่อระบบแสดงรายละเอียดฐานข้อมูล main
              .backup <ชื่อฐานข้อมูล>  <ชื่อไฟล์> สำรองข้อมูลของฐานข้อมูล ลงในไฟล์ที่กำหนด ถ้าไม่ระบุจะเหมือนคำสั่ง .clone ที่จะสำรองข้อมูลของฐานข้อมูล main
             .clone <ชื่อไฟล์> สำรองข้อมูล main ลงในไฟล์ที่กำหนด

 .table หรือ .tables แสดงรายชื่อตารางในฐานข้อมูลทั้งหมด
.schema <ชื่อตาราง>  คำสั่งแสดงรายละเอียดตาราง โดยระบุเป็นคำสั่งsql  create table
                                ถ้าไม่ระบุชื่อตารางระบบทำการแสดงรายละเอียดตารางทั้งหมดในฐานข้อมูลที่กำลังใช้งานอยู่
                .indexes <ชื่อดัชนี>  คำสั่งแสดงรายละเอียดของดัชนี (อินเด็กซ์ ) ที่ระบุ หรือแสดงรายชื่อดัชนีในกรณีไม่ระบุชื่อ
                .trace <ชื่อไฟล์คำสั่งเริ่มต้นบันทึกคำสั่งต่างๆ ที่เรียกใช้ ในรูปแบบภาษา sql และเขียนไฟล์เมื่อใช้คำสั่ง .trace off  หมายเหตุ ถ้ามีไฟล์เดิมอยู่ระบบทำการเขียนทับไฟล์เดิมทันที
                .output <ชื่อไฟล์> คำสั่งเริ่มต้นบันทึกการแสดผลลงในเท็กซ์ไฟล์ที่ระบุ และเขียนไฟล์เมื่อใช้คำสั่ง .output ซึ่งระบบจะทำการแสดงผลทางหน้าจอ หมายเหตุ ถ้ามีไฟล์เดิมอยู่ระบบทำการเขียนทับไฟล์เดิมทันที
                .save <ชื่อไฟล์> คำสั่งบันทึกข้อมูลจากหน่วยความจำลงในไฟล์ จากที่รันโปรแกรมโดยไม่ระบุฐานข้อมูล