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

Tối ưu hóa truy vấn MySql:Quá chậm khi đặt hàng

Thay vì đặt Order By vào truy vấn chính, bọc nó lại, như sau:

SELECT * FROM (   
  ... your query
) ORDER BY `created at`

Hãy xem kế hoạch truy vấn. Bạn sẽ thấy rằng trong trường hợp của mình, việc sắp xếp được thực hiện trên bảng của bạn mtrt_items trước khi kết nối bên ngoài được thực hiện. Trong phần viết lại mà tôi đã cung cấp một phần, cách sắp xếp được áp dụng sau các phép nối bên ngoài và được áp dụng trên một nhóm nhỏ hơn nhiều.

CẬP NHẬT

Giả sử rằng LIMIT đang được áp dụng cho một tập hợp lớn (500.000?), Có vẻ như bạn có thể thực hiện phần trên trước khi thực hiện bất kỳ phép kết hợp nào.

SELECT * from (
    SELECT 
    `id`, ... `created_at`, ...
    ORDER BY `i`.`created_at` DESC 
    LIMIT 100 OFFSET 0) as i

    LEFT JOIN `mtrt_users` AS `u` ON i.user_id =u.id

    LEFT JOIN `twt_tweets_content` AS `t` ON t.id =i.id
    LEFT JOIN `twt_users` AS `tu` ON t.user_id = tu.id

    INNER JOIN `mtrt_items_searches` AS `r` ON i.id =r.item_id
    INNER JOIN `mtrt_searches` AS `s` ON s.id =r.search_id
    INNER JOIN `mtrt_searches_groups` AS `sg` ON sg.search_id =s.id
    INNER JOIN `mtrt_search_groups` AS `g` ON sg.group_id =g.id
    INNER JOIN `account_clients` AS `c` ON g.client_id =c.id                

GROUP BY i.id


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhóm MySQL theo Ngày giữa

  2. Làm cách nào để tìm ra URL, máy chủ, cổng và tên người dùng MySQL của tôi?

  3. Không kết nối được với mysql tại 127.0.0.1:3306 với quyền truy cập root của người dùng bị từ chối đối với người dùng 'root' @ 'localhost' (sử dụng mật khẩu:CÓ)

  4. Chọn tối đa của tổng hai cột

  5. Di chuyển từ MySQL sang PostgreSQL trên Linux (Kubuntu)