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

MySQL:tập hợp lồng nhau có chậm không?

IME, MySQL không làm tốt trong việc tối ưu hóa các truy vấn phụ - đặc biệt là nó dường như không quản lý các vị từ đẩy.

Tôi hơi băn khoăn về những gì truy vấn thực sự nhằm mục đích trả về - đặc biệt là 'phụ huynh'

Bạn sẽ nhận được một số cải thiện bằng cách đặt left_id và right_id vào một chỉ mục duy nhất.

Mặc dù bạn cũng sẽ nhận được một số cải tiến bằng cách bỏ cuộn truy vấn vào một thủ tục được lưu trữ, vì dường như bạn đang duyệt qua gần như toàn bộ tập dữ liệu mỗi khi giải pháp tốt hơn sẽ là không chuẩn hóa độ sâu của cây và lưu trữ nó dưới dạng một thuộc tính cho mỗi nút. Thật vậy, dường như bạn đang duyệt qua nó ít nhất hai lần chỉ trong truy vấn bên ngoài.

Tuy nhiên, tôi nhận thấy rằng ở cuối truy vấn:

HAVING depth > 0
   AND depth <= 1

Mà chắc chắn là điều tương tự như

HAVING depth=1

Sau đó, cung cấp một cách rất khác để tối ưu hóa truy vấn (bắt đầu bằng cách lấy tất cả các nút ở vị trí right =left + 1 để tìm các nút không có nút con và tìm cách kiểm tra id danh mục).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn MySQL đồng thời trong cùng một bảng:làm thế nào để?

  2. Xóa nhiều hàng bằng cách chọn hộp kiểm sử dụng PHP

  3. mysql tinyint (1) vs tinyint (2) vs tinyint (3) vs tinyint (4)

  4. Làm cách nào để tôi có thể tìm nạp các cảnh báo sau các truy vấn node-mysql

  5. Hàm thay thế mysql_list_tables () trong php 5 là gì