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

Loại trừ các bản ghi trong đó truy vấn con trả về kết quả cần loại trừ lẫn nhau

Và nó thật xấu xí. Nó hoạt động tốt cho đến khi có bất kỳ tải trọng đáng kể nào khác trên DB, và sau đó tất cả diễn ra rất chậm. Điều này chủ yếu là do các giới hạn IO của máy chủ, nhưng cách tiếp cận đơn giản hơn là đưa isfiction và isNonFiction vào các bảng MEMORY và sau đó câu lệnh DELETE có thể trông giống như sau:

    DELETE tmp_table FROM tmp_table
         INNER JOIN
         (
            SELECT ASIN, MAX( isFiction ) AS isFiction, MAX( isNonFiction ) AS isNonFiction
            FROM tmp_table
            GROUP BY ASIN
            HAVING isFiction =1
            AND isNonFiction =1
         ) D
         WHERE D.ASIN=tmp_table.ASIN AND tmp_table.isNonFiction=1

Trong thử nghiệm, điều này đang đưa toàn bộ quá trình giảm từ khoảng 90 giây xuống 10 giây.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sắp xếp theo thứ tự Truy vấn để tìm tất cả các bản ghi nằm trong phạm vi ngày

  2. Nhận ngày, giờ và phút còn lại bằng mySql

  3. MySQL:lỗi 150 khi sử dụng ON UPDATE SET NULL và ON DELETE SET NULL, tại sao?

  4. R- Các ký tự đặc biệt không được chèn vào mysql

  5. Lỗi nghiêm trọng:Gọi đến hàm không xác định getqlvaluestring ()