MySQL 大致测试更新时间

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:更新记录很多的时候,字段上有索引快还是没有索引快?

时间: 2024-11-07 13:23:58

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

mysql table 最新更新时间

查看表的最后mysql修改时间   SELECT TABLE_NAME,UPDATE_TIME FROM information_schema.tables where TABLE_SCHEMA='database_name'; 通过查看数据库中表的最后更新时间. MySQL日期时间函数大全 DAYOFWEEK(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)mysql> select DAYOFWEEK('1998-02-03'); -> 3 WE

mysql中自动更新时间CURRENT_TIMESTAMP

timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP http://blog.163.com/[email protected]/blog/static/2142429620122611356554/ http://www.cnblogs.com/yjf512/archive/2012/11/02/2751058.html http://blog.sina.com.cn/s/blog_49a665e10100cb52.html

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

本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50326259 在使用SQL的时候,希望在更新数据的时候自动填充更新时间,那么在mysql中是如何实现的呢? 如创建表users CREATE TABLE RS_SIGNUPUSER ( ID VARCHAR(36) COMMENT '主键(业务功能无关)', USERNAME VARCHAR(50) COMMENT '姓名', USERGENDER VARCHAR

mysql的时间字段 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT &#39;更新时间&#39;

在创建时间字段的时候 DEFAULT CURRENT_TIMESTAMP表示当插入数据的时候,该字段默认值为当前时间 ON UPDATE CURRENT_TIMESTAMP表示每次更新这条数据的时候,该字段都会更新成当前时间 这两个操作是mysql数据库本身在维护,所以可以根据这个特性来生成[创建时间]和[更新时间]两个字段,且不需要代码来维护 如下: CREATE TABLE `mytest` ( `text` varchar(255) DEFAULT '' COMMENT '内容', `cr

MySQL数据库时间设置自动添加时间和自动更新时间

说明: MySQL字段中设置时间字段自动添加创建时间和自动更新时间设置,设置字段类型为:timestamp 默认值设置为current_timestamp(),更新时间字段字段类型为:timestamp 默认值设置为 current_timestamp() ON UPDATE current_timestamp() SQL语法和实例 create table tb_name( join_time timestamp NULL DEFAULT current_timestamp(), update

我爱java系列之---【mysql自动更新创建时间和更新时间】

1.所有时间和日期的数据类型: 2.MySQL 脚本实现用例 --添加CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER TABLE `table_name` ADD COLUMN `CreateTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ; --修改CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER TABLE `table_name` MODIFY C

mysql字段值自动更新时间

在生产环境中可能会出现,项目已经上线,但是更新时间的字段没有赋值,也就是说这条数据每次更新时,更新的时间依旧是null.为了解决这个问题,一般是将程序更新数据时,把更新时间给更新了.但是上线后更改程序需要重新升级,挺麻烦.现在可以通过修改更新时间的字段,来保证每次更新数据时,数据的更新时间自动更新. 在一个已经建好的表执行如下sql即可完成更新时间自动更新: ALTER TABLE checker_barcode MODIFY COLUMN update_time TIMESTAMP NOT N

mysql根据某个字段分组根据更新时间获取最新的记录

我现在有一种统计表,要根据一个字段分组然后根据更新时间,每个分组获取最新的一条记录.命名感觉挺简单的一个需求,然而没什么思路,当然是问度娘了. 度娘的答案很统一,然而都不管用,都是报错的,不知道是不是因为mysql5.7的原因,不过我记得group by也是不能查出整条记录的,为什么百度上都可以,百思不得解! 从网上找个例子: 根据USER_ID分组,每个获取 last_updated_date最新的一条记录. SELECT ID,USER_ID,problems,last_updated_da

Mysql 添加 create_time, update_time 创建时间 更新时间 自动更新

# 添加创建 更新 时间字段 ALTER TABLE `表名` ADD COLUMN `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `最后一个列名`, ADD COLUMN `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `create_time`; 执行后, 会批量更新 现有数据全部自动更新为当前时间,  新插入的数据时候自动更新插入