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

Tối ưu hóa các truy vấn MySQL trên dữ liệu phân cấp

Nếu không dành thời gian kiểm tra nó, bạn đã cung cấp một ví dụ chưa đầy đủ? Bạn chắc chắn nên thử sắp xếp lại thứ tự trong số các bảng đã tham gia. Giải thích đầu ra cung cấp một số thông tin, giả sử đặt hàng bằng key_len sẽ nhanh nhất về mặt kinh nghiệm. Bảng đầu tiên được lọc nên được liệt kê là bảng cuối cùng trong trường hợp trình tối ưu hóa không thể tìm ra điều đó, tôi tin.

Vì vậy, giả sử thứ tự 'c, v, k, u' là tốt nhất.

SELECT DISTINCT
  `v`.`key`,
  `u`.`val`
FROM
  `VertexDictionary`  AS `u`
  JOIN `SpecialKeys`       AS `k` ON (`k`.`x`, `k`.`key`) = (`u`.`x`, `u`.`key`)
  JOIN `VertexDictionary`  AS `v`
  JOIN `ConnectedVertices` AS `c` ON (`u`.`x`, `u`.`y`  ) = (`c`.`tail_x`, `c`.`tail_y`)
           AND (`v`.`x`, `v`.`y`  ) = (`c`.`head_x`, `c`.`head_y`)
WHERE
  `v`.`x` = X
;

'row' sẽ đề xuất thứ tự 'c / u, k, v', nhưng điều đó phụ thuộc vào dữ liệu:

SELECT DISTINCT
  `v`.`key`,
  `u`.`val`
FROM
  `VertexDictionary`  AS `u`
  JOIN `VertexDictionary`  AS `v`
  JOIN `SpecialKeys`       AS `k` ON (`k`.`x`, `k`.`key`) = (`u`.`x`, `u`.`key`)
  JOIN `ConnectedVertices` AS `c` ON (`u`.`x`, `u`.`y`  ) = (`c`.`tail_x`, `c`.`tail_y`)
                                 AND (`v`.`x`, `v`.`y`  ) = (`c`.`head_x`, `c`.`head_y`)
 WHERE
  `v`.`x` = X
;

Hy vọng điều này sẽ hữu ích.

CẬP NHẬT (tránh tham gia varchar):

SELECT DISTINCT
  `v`.`key`,
  `u`.`val`
FROM
       `ConnectedVertices` AS `c`
  JOIN `VertexDictionary`  AS `u` ON (`u`.`x`, `u`.`y`  ) = (`c`.`tail_x`, `c`.`tail_y`)
  JOIN `VertexDictionary`  AS `v` ON (`v`.`x`, `v`.`y`  ) = (`c`.`head_x`, `c`.`head_y`)
WHERE
  (`u`.`x`, `u`.`key`) IN (SELECT `k`.`x`, `k`.`key` FROM `SpecialKeys` AS `k`)
AND
  `v`.`x` = X
;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel - cách cập nhật toàn bộ bộ sưu tập

  2. Cảnh báo:mysql_query ():đối số được cung cấp không phải là MySQL-Link hợp lệ - Tại sao?

  3. SQL:ĐẶT HÀNG THEO hai cột trộn lẫn, không dựa trên mức độ ưu tiên

  4. Hướng dẫn thiết kế cơ sở dữ liệu cho giỏ hàng trực tuyến trong MySQL

  5. Truy xuất id được chèn cuối cùng cho nhiều hàng