zoukankan      html  css  js  c++  java
  • 存储过程写入大批量数据,用于测试mysql查询优化

    ---恢复内容开始---

    最近仔细研究了一下mysql优化索引的知识,当然开始玩之前还是要插入大量数据的

    下面是表结构

    Ps:这个插入是我看韩老师的mysq优化章节

     1 #创建表EMP雇员
     2 CREATE TABLE emp
     3 (empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*编号*/
     4 ename VARCHAR(20) NOT NULL DEFAULT "",/*名字*/
     5 job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/
     6 mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上级编号*/
     7 hiredate DATE NOT NULL,/*入职时间*/
     8 sal DECIMAL(7,2) NOT NULL,/*薪水*/
     9 comm DECIMAL(7,2),/*红利*/
    10 deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0/*部门编号*/
    11 )ENGINE=MyISAM DEFAULT CHARSET=utf8;

    然后我们创建存储过程

    先:delimiter $$

    先创建随机部门号函数

    #这里我们有自定了一个函数,返回一个随机部门号
    create function rand_num()
    returns int(5)
    begin
    declare i int default 0;
    set i = floor(10+rand()*500);
    return i;
    end $$

    然后我们创建存储函数

    #随机添加雇员 max_num条,雇员编号从 start
    #start是雇员编号开始,max_num准备添加多少雇员
    create procedure inset_emp(in start int(10),in max_num int(10))
    begin
    declare i int default 0;
    #set autocommit=0 把autocommit设置成0  含义:不要自动提交
    set autocommit = 0;
    repeat
    set i = i + 1;
    #通过前面写的函数随机产生字符串和部门编号,然后加入带emp表
    insert into emp values ((start+i),rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());
    until i = max_num
    end repeat;
    #commit 整体提交所有spl语句,提高效率
    commit;
    end $$

    最后执行inset_emp插入数据

    call inset_emp(100001,8000000)$$

    最后等待执行完毕。一般时间和机器配置有关,我是用的windows i3cpu 4分钟。

    最后我们试一下查询速度。

    【这里我之前生成数据的时候,价格id主键,就不删除id了,咱们直接查询ename】

    然后我们执行随机查询

    发现时间都是很久,然后我们为字段ename添加索引

    这个执行可能需要几分钟时间,因为他要在数据根目录创建一个索引文件

    MYI结尾文件是MYD结尾文件大小的约三分之一。

    添加完成后,我们再执一次此查询。

     可以看出,速度提升了很多很多。

    ps:删除索引的命令是 ceshi_name是索引名,emp是表明。

    删除成功后再执行一次查询。

    可以看到有慢了许多。

  • 相关阅读:
    正整数分解质因数
    水仙花数
    键入任意整数,将之从小到大输出
    有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少
    输入某年某月某日,判断这一天是这一年的第几天?
    java 日期增加
    oracle数据库 ORA-01461: can bind a LONG value only for insert into a LONG column解决方案
    JAVA实现图片叠加效果
    JAVA_GET请求URL
    sqlserver-触发器-判断更新了哪个字段。
  • 原文地址:https://www.cnblogs.com/yanglily/p/6145765.html
Copyright © 2011-2022 走看看