sql >> Database teknologi >  >> RDS >> Mysql

Denne SELECT-forespørgsel tager 180 sekunder at afslutte

(At poste min kommentar som et svar, da det tilsyneladende gjorde en forskel!)

Hvis nogen vil undersøge dette nærmere, har jeg lige lavet en test og fundet det meget nemt at gengive.

Opret tabel

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

Opret procedure

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

Udfyld tabel

  call prc_filler(5000)

Forespørgsel 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

Forespørgsel 2 (samme problem)

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. Hvordan kan jeg bruge Entity Framework på en objektgraf forbi en dybde på 2 med MySQL Connector / NET?

  2. STØRSTE() funktion i Oracle

  3. Kan ikke starte en distribueret transaktion

  4. En omfattende guide til, hvordan du bruger MySQL