mysql快速生成测试数据的方法,以及分页limit语句优化
2018-06-14 15:17
776 查看
1、创建表:
person MyISAM
person1 InnoDB
2、创建存储过程:
3、生成数据,可以不断添加不会清空原有数据:
4、生成数据测试:
person:
第一次:
第二次:连续两次10W
第三次:300W
person1: 300W
5、查询测试:
测试代码:
测试结果:
六、总结:
数据查找越往后的情况下:
MyISAM:关键字索引不起作用,不必优化;
InnoDB:有了关键字索引,快了30%;
person MyISAM
CREATE TABLE `person` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `fname` varchar(255) NOT NULL, `age` tinyint(3) unsigned NOT NULL, `sex` tinyint(1) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8
person1 InnoDB
CREATE TABLE `person1` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `fname` varchar(255) NOT NULL, `age` tinyint(3) unsigned NOT NULL, `sex` tinyint(1) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
2、创建存储过程:
CREATE PROCEDURE `generate`(IN num INT) BEGIN DECLARE chars varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; DECLARE fname VARCHAR(25) DEFAULT ''; DECLARE lname VARCHAR(25) DEFAULT ''; DECLARE id int UNSIGNED; DECLARE len int; set id=1; #DELETE from person; WHILE id <= num DO set len = FLOOR(1 + RAND()*25); set fname = ''; WHILE len > 0 DO SET fname = CONCAT(fname,substring(chars,FLOOR(1 + RAND()*62),1)); SET len = len - 1; END WHILE; INSERT into person VALUES (NULL,fname,FLOOR(RAND()*100), FLOOR(RAND()*2)); set id = id + 1; END WHILE; END
3、生成数据,可以不断添加不会清空原有数据:
generate(100000);
4、生成数据测试:
person:
第一次:
[SQL]CALL generate(100000); 受影响的行: 1 时间: 630.181s
第二次:连续两次10W
[SQL]CALL generate(100000); 受影响的行: 1 时间: 614.775s [SQL] CALL generate(100000); 受影响的行: 1 时间: 642.726s
第三次:300W
[SQL]CALL generate(3000000); 受影响的行: 1 时间: 3029.854s
person1: 300W
[SQL]call generate(3000000); 受影响的行: 1 时间: 3888.488s
5、查询测试:
测试代码:
SELECT * FROM person LIMIT 2800000,10; SELECT * FROM person AS a INNER JOIN(SELECT id FROM person LIMIT 2800000,10) AS b ON a.id=b.id; SELECT * FROM person AS a INNER JOIN(SELECT id FROM person LIMIT 2200000,10) AS b ON a.id=b.id; SELECT * FROM person LIMIT 2200000,10; SELECT * FROM person1 LIMIT 2800000,10; SELECT * FROM person1 AS a INNER JOIN(SELECT id FROM person1 LIMIT 2800000,10) AS b ON a.id=b.id; SELECT * FROM person1 AS a INNER JOIN(SELECT id FROM person1 LIMIT 2200000,10) AS b ON a.id=b.id; SELECT * FROM person1 LIMIT 2200000,10;
测试结果:
[SQL]SELECT * FROM person LIMIT 2800000,10; 受影响的行: 0 时间: 1.175s [SQL] SELECT * FROM person AS a INNER JOIN(SELECT id FROM person LIMIT 2800000,10) AS b ON a.id=b.id; 受影响的行: 0 时间: 1.362s [SQL] SELECT * FROM person AS a INNER JOIN(SELECT id FROM person LIMIT 2200000,10) AS b ON a.id=b.id; 受影响的行: 0 时间: 1.046s [SQL] SELECT * FROM person LIMIT 2200000,10; 受影响的行: 0 时间: 0.891s [SQL] SELECT * FROM person1 LIMIT 2800000,10; 受影响的行: 0 时间: 2.230s [SQL] SELECT * FROM person1 AS a INNER JOIN(SELECT id FROM person1 LIMIT 2800000,10) AS b ON a.id=b.id; 受影响的行: 0 时间: 1.468s [SQL] SELECT * FROM person1 AS a INNER JOIN(SELECT id FROM person1 LIMIT 2200000,10) AS b ON a.id=b.id; 受影响的行: 0 时间: 1.183s [SQL] SELECT * FROM person1 LIMIT 2200000,10; 受影响的行: 0 时间: 1.738s
六、总结:
数据查找越往后的情况下:
MyISAM:关键字索引不起作用,不必优化;
InnoDB:有了关键字索引,快了30%;
相关文章推荐
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!(zz)
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!
- mysql快速生成百万条测试数据的方法
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!
- MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适
- (纯属转贴,没有测试过)如何优化Mysql千万级快速分页,limit优化快速分页
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!(zz)
- mysql快速生成百万条测试数据的方法
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!(zz)
- mysql limit分页优化方法分享
- mysql优化limit查询语句的5个方法
- yii框架中findall方法取数据使用总结,包括select各种条件,where条件,order by条件,limit限制以及使用单纯sql语句query时占位符的使用等
- mysql limit分页优化方法分享
- MySQL Limit 性能优化及分页数据性能优化
- MySQL 大数据量快速插入方法和语句优化分享
- MySQL对limit查询语句的优化方法
- mysql limit 优化 百万至千万级快速分页 –复合索引的引用并应用于轻量级框架
- mysql limit分页优化方法分享
- 解决Mysql数据量大的时候 分页优化(使用limit)的问题
- MySQL 大数据量快速插入方法和语句优化分享