Mysql
 sql >> база данни >  >> RDS >> Mysql

Тази SELECT заявка отнема 180 секунди, за да завърши

(Публикуването на коментара ми като отговор, тъй като очевидно има значение!)

Ако някой иска да проучи това допълнително, току-що направих тест и открих, че е много лесно да се възпроизвежда.

Създаване на таблица

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

Създаване на процедура

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

Попълване на таблица

  call prc_filler(5000)

Заявка 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

Заявка 2 (същият проблем)

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/520375 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. Урок за MySQL Workbench – Изчерпателно ръководство за инструмента RDBMS

  2. Може ли MySql вложеният SP да бъде пречка?

  3. Mysql как да обединя таблици

  4. Mysql 1050 Таблица за грешки вече съществува, но всъщност не съществува

  5. Присъединете таблици от два различни сървъра