mysql性能检测01

1#存储过程插入10000条数据
建立存储过程

DELIMITER $$

USE `oa`$$

DROP PROCEDURE IF EXISTS `init_data`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `init_data`()
BEGIN
    DECLARE dindex INT DEFAULT 1;
    WHILE dindex <=10000 DO
    INSERT INTO student(sno,sname) VALUES (CONCAT('s',dindex),CONCAT('测试姓名',dindex));
    SET dindex=dindex+1;
    END WHILE;
    END$$

DELIMITER ;

查询:call init_data()

共 1 行受到影响

执行耗时   : 4 min 2 sec
传送时间   : 0.004 sec
总耗时      : 4 min 2 sec

方法2通过jdbc插入10000条数据

<insert id="batchInsert">
        insert into student
        (
            sno,
            sname
        ) values
        <foreach collection="list" item="item" index="index"
            separator=",">
            (
            #{item.sno},
            #{item.sname}
            )

        </foreach>
    </insert>
耗时:0.828秒

假如提升到10万条数据,时间大概是

耗时:3.747秒

方法1,2对比一下建议我们尽量少在存储过程调用循环大数据量插入这种方式。而且使用这种方式插入大数据量效率还是可以的。

我们试试来查询表中某重复字段数据,测试数据量分别20w和30w
SELECT t.id,t.sname FROM student t GROUP BY t.sname HAVING COUNT(t.sname)>1

20w数据时
执行耗时   : 2.475 sec
传送时间   : 0.004 sec
总耗时      : 2.479 sec
30w数据时
执行耗时   : 3.565 sec
传送时间   : 0.004 sec
总耗时      : 3.570 sec

20w到30w的数据还是有些差别,而且这还是没建任何索引的情况下得出来的,显然到百万级的时候这查询速度还是十分不乐观的,即便加了索引,效率也不会有质的提升,假如单表数据已经破百万,你也是时候考虑分库分表了。
奉上我的测试环境


18094074-08e2814d4a867410.png
image.png

mysql使用的是5.7版本,innodb引擎。

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