sql >> Databáze >  >> RDS >> Mysql

Dokončení tohoto dotazu SELECT trvá 180 sekund

(Zveřejnění mého komentáře jako odpovědi, protože to zjevně znamenalo rozdíl!)

Pokud to někdo chce dále prozkoumat, právě jsem provedl test a zjistil jsem, že je velmi snadné jej reprodukovat.

Vytvořit tabulku

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

Vytvořit postup

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

Vyplnit tabulku

  call prc_filler(5000)

Dotaz 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

Dotaz 2 (stejný problém)

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
    )
  )

In Explain Output http://img291.imageshack.us/img291/8129/52037513. png



  1. Připojení k Sage z Javy

  2. mysql_connect (localhost / 127.0.0.1) pomalý na platformě Windows

  3. Zkontrolujte, zda je aktuální datum mezi dvěma daty Oracle SQL

  4. Jaký je nejlepší způsob přístupu k databázi z PHP?