1:需求:把一个2千万条数据的一个表,随机更新其中的二十行需要大致多久?

  1. DROP TABLE IF EXISTS test20;

  

  1. CREATE TABLE test20(
  2. id INT AUTO_INCREMENT PRIMARY KEY,
  3. money DOUBLE,
  4. createdtime DATETIME)ENGINE=INNODB DEFAULT CHARSET=UTF8;

  

  1. DROP PROCEDURE IF EXISTS pro_test20;
  2.  
  3. DELIMITER &&
  4. CREATE PROCEDURE pro_test20(IN inr int)
  5. BEGIN
  6. DECLARE i INT DEFAULT 0;
  7. START TRANSACTION;
  8. WHILE i<inr DO
  9. INSERT INTO test20(money,createdtime) values(234567891023,'2014-06-22 20:18:38');
  10. SET i=i+1;
  11. END WHILE;
  12. COMMIT;
  13. END &&
  14.  
  15. DELIMITER ;
  1. mysql> call pro_test20(10000000);
  2. Query OK, 0 rows affected (4 min 50.37 sec)

  

  1. mysql> call pro_test20(10000000);
  2. Query OK, 0 rows affected (8 min 18.97 sec)

  

  1. #20次
  2. INSERT INTO test20(money,createdtime) values(234567891023,'2013-03-33 20:18:38');
  1. mysql> INSERT INTO test20(money,createdtime) values(234567891023,'2013-03-03 20:18:38');
  2. Query OK, 1 row affected, 1 warning (0.02 sec)
  1. UPDATE test20 SET money=money+10000000,createdtime=now()
  2. WHERE createdtime='2013-03-03 20:18:38';
  1. mysql> UPDATE test20 SET money=money+10000000,createdtime=now() WHERE id BETWEEN 200000 AND 200020;
  2. Query OK, 21 rows affected (0.01 sec)
  3. Rows matched: 21 Changed: 21 Warnings: 0
  4.  
  5. mysql> UPDATE test20 SET money=money+10000000,createdtime=now() where id in (36,457,67842,21,324,68,23,12,345,547,56,234,7263,233525,252522,3523,76666,1231,54);
  6. Query OK, 19 rows affected (0.05 sec)
  7. Rows matched: 19 Changed: 19 Warnings: 0

  

  

1:需求:把一个2千万条数据的一个表,随机更新其中的一千行需要大致多久?

存储过程测试1:(效率很低)

  1. DROP PROCEDURE IF EXISTS pro_tab1000;
  2. DROP TABLE IF EXISTS tab_test20;
  3. CREATE TABLE tab_test20(id int)ENGINE=INNODB DEFAULT CHARSET=UTF8;
  4.  
  5. DELIMITER &&
  6. CREATE PROCEDURE pro_tab1000(IN inr int)
  7. BEGIN
  8. DECLARE i INT DEFAULT 0;
  9. WHILE i<inr DO
  10. INSERT INTO tab_test20 SELECT floor(RAND() * (SELECT MAX(id) FROM test20));
  11. SET i=i+1;
  12. END WHILE;
  13. END &&
  14.  
  15. DELIMITER ;
  16.  
  17. CALL pro_tab1000(1000);
  18.  
  19. UPDATE test20 SET money=money+10000000,createdtime=now() WHERE id in (SELECT DISTINCT id FROM tab_test20);

  

存储过程测试2:2s

  1. DELIMITER &&
  2. DROP PROCEDURE IF EXISTS pro_test1000;
  3. CREATE PROCEDURE pro_test1000(IN inr int)
  4. BEGIN
  5. DECLARE i INT DEFAULT 0;
  6. DECLARE j INT ;
  7. SELECT FLOOR(RAND()*(SELECT MAX(id) FROM test20)) into j;
  8. WHILE i<inr DO
  9. UPDATE test20 SET money=money+10000000,createdtime=now() WHERE id = j;
  10. SET i=i+1;
  11. END WHILE;
  12. END &&
  13.  
  14. DELIMITER ;

  

效率很低的语句:

  1. SELECT id FROM test20 ORDER BY rand() LIMIT 10

  

  1. mysql> SELECT id FROM test20 ORDER BY rand() LIMIT 10;
  2. +----------+
  3. | id |
  4. +----------+
  5. | 1876355 |
  6. | 10266755 |
  7. | 14746331 |
  8. | 17533398 |
  9. | 8164806 |
  10. | 8438406 |
  11. | 12884382 |
  12. | 17285257 |
  13. | 9817314 |
  14. | 10273314 |
  15. +----------+
  16. 10 rows in set (26.67 sec)

  

问题1:更新记录很多的时候,字段上有索引快还是没有索引快?

MySQL 大致测试更新时间的更多相关文章

  1. mysql table 最新更新时间

    查看表的最后mysql修改时间   SELECT TABLE_NAME,UPDATE_TIME FROM information_schema.tables where TABLE_SCHEMA='d ...

  2. mysql中自动更新时间CURRENT_TIMESTAMP

    timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP http://blog.163.com/qiongling007@126/b ...

  3. MYSQL 更新时间自动同步与创建时间默认值共存问题

    本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50326259 在使用SQL的时候,希望在更新数据的时候自动填充更新 ...

  4. mysql中创建时间和更新时间的区别

    `create_time` ) NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` ) ) COMMENT '更新时间', 而在界 ...

  5. MySQL load数据的时候自动更新时间

    MySQL load数据的时候自动更新时间 前提 CREATE TABLE table_name ( dt varchar(255) NULL , ctime timestamp NULL ON UP ...

  6. MYSQL查看数据表最后更新时间

    MYSQL查看数据表最后更新时间 - 拨云见日 - CSDN博客 https://blog.csdn.net/warnerwu/article/details/73352774 mysql> S ...

  7. MYSQL 更新时间自己主动同步与创建时间默认值共存问题

    本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50326259 在使用SQL的时候,希望在更新数据的时候自己主动填充 ...

  8. MySQL表内更新时,自动记录时间

    1.创建表: create table test_time(id int primary key not null,status  varchar(24),create_time datetime d ...

  9. mysql自动更新时间

    ALTER TABLE sys_user MODIFY COLUMN update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDAT ...

随机推荐

  1. Crack相关

    Microsoft Office 2007专业增强版密钥:KXFDR-7PTMK-YKYHD-C8FWV-BBPVWM7YXX-XJ8YH-WY349-4HPR9-4JBYJCTKXX-M97FT-8 ...

  2. poj 1321 棋盘问题(n行中放任意k行)

    n*n的棋盘摆K的棋子,任意两个棋子不能在同一行同一列 Sample Input 2 1#.  //# 可放.#4 4...#..#..#..#...-1 -1Sample Output 21 # i ...

  3. 用Delphi从内存流中判断图片格式

    https://blog.csdn.net/my98800/article/details/53536774 废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件 ...

  4. python多进程和多线程

    多任务才有多进程和线程: 线程是最小的执行单元,而进程由至少一个线程组成.如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间. 多进程和多线程的程序涉及到同步.数据共享 ...

  5. Codeblocks 常用快捷键

    编辑部分: Ctrl + A:全选Ctrl + C:复制Ctrl + X: 剪切Ctrl + V:粘贴Ctrl + Z:撤销Ctrl + S:保存Ctrl + Y / Ctrl + Shift + Z ...

  6. (转)一位资深程序员大牛给予Java初学者的学习路线建议

    原文:http://geek.csdn.net/news/detail/238256 Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Java的 ...

  7. ubuntu18.04 lts重装VMware Tools实现主机文件共享等功能

    ubuntu18.04 lts重装VMware Tools实现主机文件共享等功能 在VMWare 14.x上安装ubunuu18.04 lts后发现,可以实现全屏显示,但是没有与主机共享文件的功能,然 ...

  8. vimtutor学习笔记

    简介 vimtutor是vim这款知名的文本编辑器的学习工具/指南.语法如下. vimtutor [-g] [language] gvimtutor -g选项和gvimtutor是启动GUI版本的指南 ...

  9. COGS.1317.数列操作c(分块 区间加 区间求和)

    题目链接 #include<cmath> #include<cstdio> #include<cctype> #include<algorithm> u ...

  10. Shiro笔记(一)基本概念

    Shiro笔记(一)基本概念 一.简介 Shiro是一个Java安全框架,可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等. Authentication:身份认证/登录,验证用户是 ...