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

Sử dụng filesort để sắp xếp theo cột ngày giờ trong MySQL

Bạn cần có một chỉ mục tổng hợp trên (public, date)

Bằng cách này, MySQL sẽ lọc trên public và sắp xếp vào ngày date .

Từ EXPLAIN của bạn Tôi thấy rằng bạn không có chỉ mục tổng hợp trên (public, date) .

Thay vào đó, bạn có hai chỉ mục khác nhau trên public và vào ngày date . Ít nhất, đó là tên của họ IDX_PUBLICDATE kể.

Cập nhật:

Bạn public cột không phải là BIT , đó là BINARY(1) . Đó là một kiểu ký tự và sử dụng phép so sánh ký tự.

Khi so sánh số nguyên với ký tự, MySQL chuyển đổi cái sau thành cái trước, không phải ngược lại.

Các truy vấn này trả về các kết quả khác nhau:

CREATE TABLE t_binary (val BINARY(2) NOT NULL);

INSERT
INTO    t_binary
VALUES
(1),
(2),
(3),
(10);

SELECT  *
FROM    t_binary
WHERE   val <= 10;

---
1
2
3
10

SELECT  *
FROM    t_binary
WHERE   val <= '10';
---
1
10

Thay đổi public của bạn là một bit hoặc viết lại truy vấn của bạn như sau:

SELECT  c.*
FROM    Cars c
WHERE   c.PUBLIC = '1'
ORDER BY 
        DATE DESC

, tôi. e. so sánh các ký tự với các ký tự, không phải số nguyên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tiếp cận tình huống tiến thoái lưỡng nan:xuất đơn đặt hàng từ hệ thống magento cũ nhập vào magento mới, các ID chồng chéo

  2. Mysql:kết quả từ bảy ngày qua

  3. JSON_VALID () - Kiểm tra JSON hợp lệ trong MySQL

  4. Sự khác biệt giữa MySQL và SQLite trong SQL

  5. MySQL:thêm và nhân trên các bảng khác nhau