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

Kueri SELECT ini membutuhkan waktu 180 detik untuk diselesaikan

(Memposting komentar saya sebagai jawaban karena ternyata itu membuat perbedaan!)

Jika ada yang ingin menyelidiki ini lebih lanjut, saya baru saja melakukan tes dan ternyata sangat mudah untuk mereproduksi.

Buat Tabel

CREATE TABLE `filler` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) 

Buat Prosedur

CREATE PROCEDURE `prc_filler`(cnt INT)
BEGIN
        DECLARE _cnt INT;
        SET _cnt = 1;
        WHILE _cnt <= cnt DO
                INSERT
                INTO    filler
                SELECT  _cnt;
                SET _cnt = _cnt + 1;
        END WHILE;
END

Isi Tabel

  call prc_filler(5000)

Kueri 1

SELECT id 
FROM filler 
WHERE id =  (SELECT MAX(id) FROM filler  WHERE id =   
 ( SELECT MIN(id) 
    FROM filler
    WHERE id between 2000 and 3000
    )
  )

Equals Explain Output http://img689.imageshack.us/img689/5592/equals. png

Kueri 2 (masalah yang sama)

SELECT id 
FROM filler 
WHERE id in  (SELECT MAX(id) FROM filler  WHERE id in   
 ( SELECT MIN(id) 
    FROM filler
    WHERE id between 2000 and 3000
    )
  )

Dalam Penjelasan Keluaran http://img291.imageshack.us/img291/8129/52037513. png



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pernyataan yang disiapkan MySql Connector hanya mentransfer 64 byte

  2. Cara menulis kueri Gabung MySQL

  3. Jalankan SQL mentah dalam migrasi

  4. pengertian mysql jelaskan

  5. PHPExcel dan Pembungkus Teks