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格式。
为什么加了索引却慢了?
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格式。
为什么加了索引却慢了?
...全文
相关推荐
MySQL组合索引与最左匹配原则详解
比如100w数据,单列索引可能只能筛选出10%,而组合索引(col1,col2,col3)可以筛选出100w * 10% * 10% * 10% = 1000条数据,显著减少了需要处理的数据量。
性能测试新手误区2:为什么我模拟的百万测试数据是无效的.docx
测试数据应模拟真实环境中各种条件下的数据组合,包括不同法院编号、不同时间戳等,以确保数据库可以正确地利用索引,提高查询效率。
t100w.sql进行压力测试100万行数据
mysql进行压力测试100万行数据,测试数据库的查询能力。
快速生成10万条测试数据
SYSDATE + ROWNUM / (24 * 3600), 'YYYY-MM-DD HH24:MI:SS') AS inc_datetime, TRUNC(DBMS_RANDOM.VALUE(0, 100
中国1:100w草地资源数据
标题 "中国1:100w草地资源数据" 指的是一个关于中国地理信息的专题数据集,其中包含了全国范围内的草地资源信息。


