100w测试数据,为什么加了索引查询反而变慢了?解决思路

100w测试数据,为什么加了索引查询反而变慢了?

建表:

create table tb_test(fval varchar(50));

———————————————-

插入测试数据:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `P_teset`()

BEGIN

  DECLARE v_val VARCHAR(20);

DECLARE v_str VARCHAR(20);

  DECLARE v_i INT ;

  DECLARE v_j INT;

SET v_str =’abcdefghijklmnopqrstuvwxyz’;

  SET v_i=0;

  SET v_j=0;

   

  WHILE v_i<600000 DO 

  SET v_val =”;

   

  WHILE v_j< 13 DO 

  SET v_val= CONCAT(v_val,SUBSTRING(v_str,1,FLOOR(1+RAND()*26)));  

  SET v_j=v_j+1;  

  END WHILE;

  SET v_j=0;

  INSERT INTO tb_test(fval)

  VALUES(v_val);  

  SET v_i =v_i+1;  

  END WHILE;

  END$$

DELIMITER ;

———————————————-

测试like:

SELECT *

FROM tb_test 

WHERE fval LIKE ‘%ab’;

70231条 用时0.531s

SELECT *

FROM tb_test 

WHERE fval LIKE ‘ab%’

961406条用时1.422s

———————————————

加索引:

ALTER TABLE tb_test ADD INDEX my_index(fval); 

———————————————

再测试:

SELECT *

FROM tb_test 

WHERE fval LIKE ‘%ab’;

70231条 用时1.094s

SELECT *

FROM tb_test 

WHERE fval LIKE ‘ab%’

961406条用时1.485s

表为MyISAM格式。

为什么加了索引却慢了?



LIKE ‘%ab’;不走索引




这个时间和缓存也有关系,你最好每次执行sql都重启下数据库已清空缓存




引用SELECT *

FROM tb_test

WHERE fval LIKE ‘%ab’;

70231条 用时0.531s

SELECT *

FROM tb_test

WHERE fval LIKE ‘ab%’

 961406条用时1.422s




探讨

建表:

create table tb_test(fval varchar(50));

———————————————-

插入测试数据:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `P_teset`()

BEGIN

DECLARE v_val V……



你可以用 explain 分析你的sql语句,看你的索引是否利用到了!添加索引会产生磁盘碎片,占用资源空间,在插入或修改时都会操作索引!所以建索引一般都是在where条件后面的字段做索引!

100w测试数据,为什么加了索引查询反而变慢了?解决思路

相关文章:

你感兴趣的文章:

标签云: