Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn SELECT này mất 180 giây để hoàn thành

(Đăng nhận xét của tôi như một câu trả lời vì dường như nó đã tạo ra sự khác biệt!)

Nếu ai đó muốn tìm hiểu thêm về vấn đề này, tôi vừa thực hiện một thử nghiệm và thấy nó rất dễ tái tạo.

Tạo bảng

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

Tạo thủ tục

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

Điền bảng

  call prc_filler(5000)

Truy vấn 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
    )
  )

Đầu ra Giải thích Bình đẳng http://img689.imageshack.us/img689/5592/equals. png

Truy vấn 2 (cùng một vấn đề)

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

Trong Đầu ra Giải thích 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. Lớp phân trang trong PHP

  2. Không thể tải plugin xác thực 'caching_sha2_password'

  3. Facebook PHP SDK - Lưu trữ dữ liệu người dùng vào cơ sở dữ liệu MYSql

  4. PHP mất nhiều thời gian hơn 90 lần để chạy truy vấn so với máy khách MySQL

  5. một bảng cố định có nhiều cột so với bảng trừu tượng linh hoạt