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

DROP TABLE IF EXISTS test20;

  

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

  

DROP PROCEDURE IF EXISTS pro_test20;

DELIMITER &&
CREATE PROCEDURE pro_test20(IN inr int)
BEGIN
DECLARE i INT DEFAULT 0;
START TRANSACTION;
WHILE i<inr DO
INSERT INTO test20(money,createdtime) values(234567891023,'2014-06-22 20:18:38');
SET i=i+1;
END WHILE;
COMMIT;
END && DELIMITER ;
mysql> call pro_test20(10000000);
Query OK, 0 rows affected (4 min 50.37 sec)

  

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

  

#20次
INSERT INTO test20(money,createdtime) values(234567891023,'2013-03-33 20:18:38');
mysql> INSERT INTO test20(money,createdtime) values(234567891023,'2013-03-03 20:18:38');
Query OK, 1 row affected, 1 warning (0.02 sec)
UPDATE test20 SET money=money+10000000,createdtime=now()
WHERE createdtime='2013-03-03 20:18:38';
mysql> UPDATE test20 SET money=money+10000000,createdtime=now() WHERE id BETWEEN 200000 AND 200020;
Query OK, 21 rows affected (0.01 sec)
Rows matched: 21 Changed: 21 Warnings: 0 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);
Query OK, 19 rows affected (0.05 sec)
Rows matched: 19 Changed: 19 Warnings: 0

  

  

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

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

DROP PROCEDURE IF EXISTS pro_tab1000;
DROP TABLE IF EXISTS tab_test20;
CREATE TABLE tab_test20(id int)ENGINE=INNODB DEFAULT CHARSET=UTF8; DELIMITER &&
CREATE PROCEDURE pro_tab1000(IN inr int)
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i<inr DO
INSERT INTO tab_test20 SELECT floor(RAND() * (SELECT MAX(id) FROM test20));
SET i=i+1;
END WHILE;
END && DELIMITER ; CALL pro_tab1000(1000); UPDATE test20 SET money=money+10000000,createdtime=now() WHERE id in (SELECT DISTINCT id FROM tab_test20);

  

存储过程测试2:2s

DELIMITER &&
DROP PROCEDURE IF EXISTS pro_test1000;
CREATE PROCEDURE pro_test1000(IN inr int)
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE j INT ;
SELECT FLOOR(RAND()*(SELECT MAX(id) FROM test20)) into j;
WHILE i<inr DO
UPDATE test20 SET money=money+10000000,createdtime=now() WHERE id = j;
SET i=i+1;
END WHILE;
END && DELIMITER ;

  

效率很低的语句:

SELECT id FROM test20 ORDER BY rand() LIMIT 10

  

mysql> SELECT id FROM test20 ORDER BY rand() LIMIT 10;
+----------+
| id |
+----------+
| 1876355 |
| 10266755 |
| 14746331 |
| 17533398 |
| 8164806 |
| 8438406 |
| 12884382 |
| 17285257 |
| 9817314 |
| 10273314 |
+----------+
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. java 知识体系

    java分成J2ME(移动应用开发),J2SE(桌面应用开发),J2EE(Web企业级应用),所以java并不是单机版的,只是面向对象语言.建议如果学习java体系的话可以这样去学习: *第一阶段:J ...

  2. 【C++ Primer 第13章】6.对象移动

    右值引用 左值和右值 (1)两者区别: ①左值:能对表达式取地址.或具名对象/变量.一般指表达式结束后依然存在的持久对象. ②右值:不能对表达式取地址,或匿名对象.一般指表达式结束就不再存在的临时对象 ...

  3. Ajax提交form表单内容和文件(jQuery.form.js)

    jQuery官网是这样介绍form.js A simple way to AJAX-ify any form on your page; with file upload and progress s ...

  4. BZOJ1068 [SCOI2007]压缩 区间动态规划 字符串

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1068 题目概括 (其实是复制的) 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中 ...

  5. Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分

    PO:持久对象 (persistent object),po(persistent object)就是在Object/Relation Mapping框架中的Entity,po的每个属性基本上都对应数 ...

  6. 浅谈html5 video 移动端填坑记

    这篇文章主要介绍了浅谈html5 video 移动端填坑记,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 本文介绍了html5 video 移动端填坑记,分享给大家,具体 ...

  7. BZOJ.2229.[ZJOI2011]最小割(最小割树)

    题目链接 题意:给定一张无向图,求任意两点之间的最小割. 在所有点中任选两个点作为源点\(S\).汇点\(T\),求它们之间的最小割\(ans\),并把原图分成两个点集\(S',T'\),用\(ans ...

  8. PHP Zend Email验证函数MailVal()函数的使用

    PHP Email验证 <?php /************************************************************************ *此功能检 ...

  9. 解析3D标签云,其实很简单

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 最近开始用canvas搞3D了,搞得也是简单的东西,就是球体转圈.做出来后,突然想起以前看过的3D标签云,在以前觉得真心狂拽酷炫叼啊,当时 ...

  10. APP支付宝支付接入

    1.app支付简介 买家可以在手机,掌上电脑等无线设备的应用程序内,通过支付宝(支付宝app或网页版支付宝)付款购买商品,且资金实行实时到账. 2.申请条件 1.申请前必须拥有经过实名认证的支付宝账户 ...