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

Mengapa MySql tidak secara otomatis mengoptimalkan kueri ANTARA?

Perbandingan seperti itu tidak masuk akal, karena Anda membandingkan apel dengan jeruk.

Kedua kueri ini tidak ekivalen, mereka memberikan hasil yang berbeda,
sehingga MySql mengoptimalkannya dengan cara yang berbeda dan rencana mereka bisa berbeda.

Lihat contoh sederhana ini:http:/ /sqlfiddle.com/#!9/98678/2

create table account_range(
  is_active int,
  range_start int,
  range_end int
 );

 insert into account_range values
 (1,-20,100), (1,10,30);

Permintaan pertama memberikan 2 baris:

select * from account_range
 where is_active = 1 and 25 between range_start AND range_end;

| is_active | range_start | range_end |
|-----------|-------------|-----------|
|         1 |         -20 |       100 |
|         1 |          10 |        30 |

Kueri kedua hanya memberikan 1 baris:

SELECT * FROM account_range
WHERE
    is_active = 1 AND 
    range_start = (SELECT MAX(range_start)
                   FROM account_range
                   WHERE range_start <= 25
    ) AND 
    range_end = (SELECT MIN(range_end)
                 FROM account_range
                 WHERE range_end >= 25
    )

| is_active | range_start | range_end |
|-----------|-------------|-----------|
|         1 |          10 |        30 |

Untuk mempercepat kueri ini (yang pertama), dua indeks bitmap dapat digunakan bersama dengan operasi "bitmap dan" - tetapi MySql tidak memiliki fitur seperti itu.

Opsi lainnya adalah indeks spasial ( misalnya indeks GIN di PostgreSql:http://www.postgresql. org/docs/current/static/textsearch-indexes.html ).

Dan opsi lain adalah transformasi bintang (atau skema bintang) - Anda perlu "membagi" tabel ini menjadi dua tabel "dimensi" atau "ukuran" dan satu tabel "fakta" .. .. tapi ini topik yang terlalu luas, jika Anda ingin tahu lebih banyak Anda bisa mulai dari sini:https:// /en.wikipedia.org/wiki/Star_schema



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panggil ke fungsi yang tidak ditentukan session_register()

  2. Pembuat kueri doktrin DATE_FORMAT tidak berfungsi

  3. Mysql -- 30 hari terakhir

  4. Cara yang lebih baik untuk mencari tag di tabel mysql

  5. Mengunduh data ke file csv dari MySQL menggunakan PHP