SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

SQLite VACUUM

Tóm tắt :trong hướng dẫn này, chúng tôi sẽ giải thích lý do tại sao bạn cần sử dụng SQLite VACUUM và chỉ ra cách sử dụng nó để tối ưu hóa tệp cơ sở dữ liệu.

Tại sao bạn cần SQLite VACUUM lệnh

Đầu tiên, khi bạn thả các đối tượng cơ sở dữ liệu như bảng, dạng xem, chỉ mục và trình kích hoạt hoặc xóa dữ liệu khỏi bảng, kích thước tệp cơ sở dữ liệu vẫn không thay đổi. Bởi vì SQLite chỉ đánh dấu các đối tượng đã xóa là miễn phí và dự trữ nó cho các lần sử dụng sau. Do đó, kích thước của tệp cơ sở dữ liệu luôn tăng về kích thước.

Thứ hai, khi bạn chèn hoặc xóa dữ liệu khỏi bảng, các chỉ mục và bảng sẽ bị phân mảnh, đặc biệt là đối với cơ sở dữ liệu có số lần chèn, cập nhật và xóa cao.

Thứ ba, các thao tác chèn, cập nhật và xóa tạo ra khối dữ liệu không sử dụng trong các trang cơ sở dữ liệu riêng lẻ. Nó làm giảm số lượng hàng có thể được lưu trữ trong một trang. Do đó, nó làm tăng số lượng trang để chứa một bảng. Vì điều này, nó làm tăng chi phí lưu trữ cho bảng, mất nhiều thời gian hơn để đọc / ghi và giảm hiệu suất bộ nhớ cache.

SQLite cung cấp VACUUM lệnh để giải quyết cả ba vấn đề trên.

SQLite lần đầu tiên sao chép dữ liệu trong tệp cơ sở dữ liệu sang cơ sở dữ liệu tạm thời. Thao tác này phân mảnh các đối tượng cơ sở dữ liệu, bỏ qua không gian trống và đóng gói lại các trang riêng lẻ. Sau đó, SQLite sao chép nội dung của tệp cơ sở dữ liệu tạm thời trở lại tệp cơ sở dữ liệu ban đầu. Tệp cơ sở dữ liệu gốc bị ghi đè.

Bởi vì VACUUM lệnh xây dựng lại cơ sở dữ liệu, bạn có thể sử dụng nó để thay đổi một số tham số cấu hình cơ sở dữ liệu cụ thể như kích thước trang, định dạng trang và mã hóa mặc định. Để thực hiện việc này, bạn đặt các giá trị mới bằng pragma và sau đó hút chân không cơ sở dữ liệu.

SQLite VACUUM lệnh

VACUUM lệnh không thay đổi nội dung của cơ sở dữ liệu ngoại trừ các giá trị rowid. Nếu bạn sử dụng INTEGER PRIMARY KEY cột VACUUM không thay đổi các giá trị của cột đó. Tuy nhiên, nếu bạn sử dụng rowid không phân biệt, thì VACUUM lệnh sẽ đặt lại các giá trị rowid. Bên cạnh việc thay đổi các giá trị rowid, VACUUM lệnh cũng tạo chỉ mục từ đầu.

Một phương pháp hay là thực hiện VACUUM lệnh định kỳ, đặc biệt là khi bạn xóa các bảng hoặc chỉ mục lớn khỏi cơ sở dữ liệu.

Điều quan trọng cần lưu ý là VACCUM lệnh yêu cầu bộ nhớ để giữ tệp gốc và cả bản sao. Ngoài ra, VACUUM lệnh yêu cầu quyền truy cập độc quyền vào tệp cơ sở dữ liệu. Nói cách khác, VACUUM lệnh sẽ không chạy thành công nếu cơ sở dữ liệu có câu lệnh SQL đang chờ xử lý hoặc giao dịch đang mở.

Hiện tại, kể từ phiên bản 3.9.2, bạn có thể chạy VACUUM trên main cơ sở dữ liệu, không phải tệp cơ sở dữ liệu đính kèm.

Mặc dù SQLite cho phép chế độ hút chân không tự động kích hoạt quá trình hút chân không tự động với một số hạn chế. Một phương pháp hay là chạy VACUUM ra lệnh thủ công.

Cách chạy SQLite VACUUM lệnh

Phần sau trình bày cách chạy VACUUM lệnh:

VACUUM;Code language: SQL (Structured Query Language) (sql)

Đảm bảo rằng không có giao dịch nào đang mở khi bạn đang chạy lệnh.

Câu lệnh sau cho phép chế độ hút chân không hoàn toàn tự động:

PRAGMA auto_vacuum = FULL;Code language: SQL (Structured Query Language) (sql)

Để bật chân không gia tăng, bạn sử dụng câu lệnh sau:

PRAGMA auto_vacuum = INCREMENTAL;Code language: SQL (Structured Query Language) (sql)

Câu lệnh sau tắt chế độ hút bụi tự động:

PRAGMA auto_vacuum = NONE;Code language: SQL (Structured Query Language) (sql)

VACUUM với một INTO mệnh đề

Đây là cú pháp của VACUUM với INTO mệnh đề:

VACUUM schema-name INTO filename;Code language: SQL (Structured Query Language) (sql)

VACUUM câu lệnh với INTO mệnh đề giữ cho tệp cơ sở dữ liệu gốc không thay đổi và tạo một cơ sở dữ liệu mới với tên tệp được chỉ định. Cơ sở dữ liệu mới sẽ chứa nội dung lôgic giống như cơ sở dữ liệu ban đầu, nhưng hoàn toàn được làm sạch.

filename trong INTO mệnh đề có thể là bất kỳ biểu thức SQL nào đánh giá thành một chuỗi. Nó phải là một đường dẫn đến một tệp không tồn tại hoặc đến một tệp trống hoặc VACUUM INTO lệnh sẽ dẫn đến lỗi.

VACUUM lệnh rất hữu ích để tạo các bản sao lưu của cơ sở dữ liệu trực tiếp. Nó là giao dịch an toàn, mà cơ sở dữ liệu được tạo là một ảnh chụp nhanh nhất quán của cơ sở dữ liệu gốc. Tuy nhiên, nếu tắt hoặc mất điện ngoài kế hoạch làm gián đoạn lệnh, cơ sở dữ liệu đã tạo có thể bị hỏng.

Câu lệnh sau sử dụng VACUUM INTO lệnh tạo cơ sở dữ liệu mới với tên tệp chinook_backup.db có dữ liệu được sao chép từ main lược đồ của chinook cơ sở dữ liệu:

VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';Code language: JavaScript (javascript)

Trong hướng dẫn này, bạn đã biết lý do tại sao bạn cần sử dụng SQLite VACUUM và cách chạy nó để tối ưu hóa cơ sở dữ liệu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lưu trữ cơ sở dữ liệu SQLite bằng Android và Phonegap

  2. SQLite Hiển thị bảng

  3. Mã hóa dữ liệu trong SQLite

  4. Cách hoạt động của hàm Date () trong SQLite

  5. Cách hoạt động của hàm JulianDay () trong SQLite