Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menggunakan filesort untuk mengurutkan berdasarkan kolom datetime di MySQL

Anda harus memiliki indeks komposit pada (public, date)

Dengan cara ini, MySQL akan memfilter di public dan urutkan pada date .

Dari EXPLAIN Saya melihat bahwa Anda tidak memiliki indeks komposit pada (public, date) .

Alih-alih, Anda memiliki dua indeks berbeda di public dan pada date . Setidaknya begitulah nama mereka IDX_PUBLIC dan DATE beritahu.

Pembaruan:

Anda public kolom bukan BIT , ini adalah BINARY(1) . Ini adalah tipe karakter dan menggunakan perbandingan karakter.

Saat membandingkan bilangan bulat dengan karakter, MySQL mengubah yang terakhir menjadi yang pertama, bukan sebaliknya.

Kueri ini mengembalikan hasil yang berbeda:

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

Ubah public kolom menjadi bit atau tulis ulang kueri Anda seperti ini:

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

, saya. e. membandingkan karakter dengan karakter, bukan bilangan bulat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buat banyak halaman dari kueri mysql

  2. Cara mengotomatiskan pengumpulan data dan tidak membeku dalam 10%

  3. MySql:PESAN OLEH orang tua dan anak

  4. Bagaimana cara memilih baris yang memiliki stempel waktu hari ini?

  5. Menghubungkan codeigniter ke mysql dan oracle dalam aplikasi yang sama