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

MySQL 5.7 RAND () và IF () không có LIMIT dẫn đến kết quả không mong muốn

Vấn đề là do một thay đổi được giới thiệu trong MySQL 5.7 về cách xử lý các bảng dẫn xuất trong các truy vấn (con).
Về cơ bản, để tối ưu hóa hiệu suất, một số truy vấn con được thực thi vào các thời điểm khác nhau và / hoặc nhiều lần dẫn đến không mong muốn kết quả khi truy vấn con của bạn trả về kết quả không xác định (như trong trường hợp của tôi với RAND() ).
Có hai cách giải quyết dễ dàng (và tương tự là xấu) để MySQL "hiện thực hóa" (hay còn gọi là trả về kết quả xác định) các truy vấn con này:Sử dụng LIMIT <high number> hoặc GROUP BY id cả hai đều buộc MySQL hiện thực hóa truy vấn con và trả về kết quả mong đợi.
Tùy chọn cuối cùng là tắt derived_merge trong optimizer_switch biến:derived_merge=off (đảm bảo giữ nguyên tất cả các thông số khác).

Các bài đọc thêm:
https://mysqlserverteam.com/derived -tables-in-mysql-5-7 /
Cột rand () của truy vấn con được đánh giá lại cho mọi lựa chọn lặp lại trong MySQL 5.7 / 8.0 so với MySQL 5.6




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không bao giờ xóa các mục nhập? Ý tưởng tốt? Bình thường?

  2. Còn lại Tham gia vào bản ghi gần đây nhất

  3. Làm cách nào để tìm kiếm và thay thế tất cả các trường hợp của một chuỗi trong cơ sở dữ liệu?

  4. Truyền không hợp lệ khi trả về mysql LAST_INSERT_ID () bằng dapper.net

  5. Spark JoinWithCassandraTable trên khóa phân vùng TimeStamp STUCK