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

Tốc độ truy vấn dựa trên thứ tự của các cột

Câu trả lời là có, nó thực sự quan trọng và nó có thể rất quan trọng, nhưng thường thì không nhiều.

Tất cả I / O được thực hiện ở cấp độ trang (thường là 2K hoặc 4K tùy thuộc vào hệ điều hành của bạn). Dữ liệu cột cho các hàng được lưu trữ bên cạnh nhau, ngoại trừ khi trang bị đầy, trong trường hợp đó, dữ liệu được ghi trên trang khác (thường là trang tiếp theo).

Không gian dữ liệu trên đĩa cần thiết cho các cột giữa (dựa trên định nghĩa bảng) các cột bạn chọn càng lớn, thì cơ hội dữ liệu cho các cột đã chọn sẽ (đôi khi) nằm trên các trang khác nhau càng lớn. Việc ở trên một trang khác có thể dẫn đến một thao tác I / O bổ sung (nếu không có hàng nào khác được chọn trên trang kia). Trong trường hợp xấu nhất, mỗi cột bạn chọn có thể nằm trên một trang khác nhau.

Đây là một ví dụ:

create table bad_layout (
num1 int,
large1 varchar(4000),
num2 int,
large2 varchar(4000),
num3 int,
large3 varchar(4000)
);

create table better_layout (
num1 int,
num2 int,
num3 int,
large1 varchar(4000),
large2 varchar(4000),
large3 varchar(4000)
);

So sánh:chọn num1, num2, num3 từ bad_layout; chọn num1, num2, num3 từ better_layout;

Vì đối với bad_layout, mỗi cột num về cơ bản sẽ nằm trên một trang khác nhau, mỗi hàng sẽ yêu cầu 3 thao tác nhập / xuất. Ngược lại, đối với số lượng cột của better_layout thường sẽ nằm trên cùng một trang.

Truy vấn bad_layout có thể mất khoảng 3 lần để thực thi.

Bố cục bảng tốt có thể tạo ra sự khác biệt lớn cho hiệu suất truy vấn. Bạn nên cố gắng giữ các cột thường được chọn gần nhau nhất có thể trong bố cục bảng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt Trình điều khiển JDBC MySQL trong Tích hợp dữ liệu Pentaho và các công cụ Máy chủ BA

  2. Làm cách nào để sử dụng ADO.NET DbProviderFactory với MySQL?

  3. Cách kiểm tra các bản sao trong bảng mysql trên nhiều cột

  4. Tần số đếm Mysql

  5. lỗi thời gian chạy:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver