疑似explain的bug?

起因

爲了測試explain, 也爲了測試關於索引優化

準備數據

  • 新建了一張測試表
  • CREATE TABLE `tb_demo` (
      `id` int NOT NULL AUTO_INCREMENT,
      `name` varchar(50) DEFAULT NULL,
      `score` decimal(10,1) DEFAULT NULL,
      `remark` varchar(50) DEFAULT NULL,
      `create_time` datetime DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  • 批量插入的存儲過程
  • DROP PROCEDURE
    IF
    EXISTS `insertdata`;
    DELIMITER $$
    CREATE
        PROCEDURE `insertdata`(IN record INTEGER)
        BEGIN
    DECLARE number INTEGER ;
    SET number=1;
    START TRANSACTION;
    WHILE number <=record DO
    INSERT INTO
    tb_demo
    (name, score, remark, create_time)
    VALUES(CONCAT('哈哈', number), number, '我測試', NOW());
    SET number =number+1;
    END WHILE;
    COMMIT;
        END$$
    DELIMITER ;
  • 新建一條普通索引
  • -- 200w條數據  執行差不多8分鐘
    call `insertdata`(2000000);
    

     

測試

EXPLAIN select score from tb_demo where score > 200 and score < 500

爲啥圖中的 走了回表? 我理解只查詢了索引 不會去找表裏的其他數據啊???

接下來我又這麼做了一下

EXPLAIN select * from tb_demo where score > 200 and score < 500

 

 

what??? 查詢所有行 不回表了???  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章