校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > MySQL制作具有千萬條測試數(shù)據(jù)的測試庫的方法

MySQL制作具有千萬條測試數(shù)據(jù)的測試庫的方法

熱門標簽:地圖標注被騙三百怎么辦 福州呼叫中心外呼系統(tǒng)哪家好 房產(chǎn)智能外呼系統(tǒng)品牌 400電話鄭州申請 沃克斯電梯外呼線路圖 北京人工外呼系統(tǒng)價錢 云南語音外呼系統(tǒng)平臺 天智外呼系統(tǒng) 常州電銷外呼系統(tǒng)一般多少錢

有時候需要制造一些測試的數(shù)據(jù),以mysql官方給的測試庫為基礎(chǔ),插入十萬,百萬或者千萬條數(shù)據(jù)。利用一些函數(shù)和存儲過程來完成。

官方給的測試庫地址:https://github.com/datacharmer/test_db

導(dǎo)入官方的數(shù)據(jù)庫,做了一些簡化,留下了部門表,員工表和雇傭表三張表,去掉了外鍵關(guān)聯(lián)。因為是測試數(shù)據(jù),日期的對應(yīng)關(guān)系不具備準確性。

必要的函數(shù)

生成隨機字符串

RAND():生成0~1之間的隨機數(shù)

FLOOR:向下整數(shù) (FlOOR(1.2)=1)

CEILING 向上取整 (CEILING(1.2)=2)

substring:截取字符串

concat:字符串連接

CREATE DEFINER=`root`@`localhost` FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1
BEGIN
	DECLARE chars_str 	varchar(100) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  DECLARE return_str 	varchar(255) DEFAULT '';
  DECLARE i INT DEFAULT 0;
  WHILE i  n DO
    SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));
    SET i = i +1;
  END WHILE;
  RETURN return_str;
END

查看自定義的所有函數(shù)

show function status

測試使用:

select rand_string(5);

生成隨機年月日字符串

生成一個指定時間段內(nèi)的隨機日期

SELECT
	date(
	from_unixtime( unix_timestamp( '2000-01-01' ) + floor( rand() * ( unix_timestamp( '2020-12-31' ) - unix_timestamp( '2000-01-01' ) + 1 ) ) ));

函數(shù):生成指定時間段內(nèi)的隨機日期

CREATE DEFINER=`root`@`localhost` FUNCTION `rand_date_string`(startDate varchar(255),endDate varchar(255)) RETURNS varchar(255) CHARSET latin1
BEGIN
  DECLARE return_str varchar(255) DEFAULT '';
	
	 SET return_str =date(
		from_unixtime( unix_timestamp( startDate ) 
				+ floor( rand() * ( unix_timestamp( endDate ) - unix_timestamp( startDate ) + 1 ) ) 
			)
	 );
  
  RETURN return_str;
END

測試使用:

select rand_date_string('2000-01-01','2020-12-31');
//結(jié)果
2001-09-10

存儲過程生成數(shù)據(jù)

給每個部門插入一百萬員工,那么員工表就有九百萬的數(shù)據(jù)。

CREATE DEFINER=`root`@`localhost` PROCEDURE `data`()
BEGIN
	
	DECLARE i INT DEFAULT 1;
	DECLARE j INT DEFAULT 0;
	DECLARE id INT DEFAULT 0;
	WHILE i  10 DO
			WHILE j  1000000 DO
				insert into employees_m (emp_no,birth_date,first_name,last_name,gender,hire_date) VALUES(
					id,rand_date_string('1970-01-01','1997-01-01'),rand_string(5),rand_string(5),'M',NOW());
				
				insert into dept_emp_m (emp_no,dept_no,from_date,to_date) values(
					 id,concat('d00',i),rand_date_string('1990-01-01','2020-12-31'),'2020-12-31');
					 
			SET j=j+1;  
			SET id=id+1;  
			END WHILE;
	SET j = 0;
	SET i=i+1;   
	END WHILE;

END

插入九百萬條數(shù)據(jù)大概用時:4868s

上面的方式插入數(shù)據(jù)會很慢,可以將數(shù)據(jù)插入到內(nèi)存表,就是將表的存儲引擎修改為MEMORY這樣就會使用內(nèi)存去存儲數(shù)據(jù),會比直接插入到INNODB引擎的表中快很多,只不過就是沒有持久化,但是速度賊快,插入一千萬條數(shù)據(jù)大概需要時間: 1227.89s

附錄

修改表存儲引擎

ALTER TABLE dept_emp_m ENGINE=MEMORY;

調(diào)整內(nèi)存表的大小,修改配置文件

[mysqld]
max_heap_table_size = 2048M
tmp_table_size = 2048M

以上就是MySQL制作具有千萬條測試數(shù)據(jù)的測試庫的方法的詳細內(nèi)容,更多關(guān)于MySQL 千萬條測試數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • MySQL循環(huán)插入千萬級數(shù)據(jù)
  • MySQL 千萬級數(shù)據(jù)量如何快速分頁
  • MySQL 快速刪除大量數(shù)據(jù)(千萬級別)的幾種實踐方案詳解
  • MySQL千萬級大數(shù)據(jù)SQL查詢優(yōu)化知識點總結(jié)
  • MySql 快速插入千萬級大數(shù)據(jù)的方法示例
  • MySQL如何快速的創(chuàng)建千萬級測試數(shù)據(jù)
  • MySQL分表實現(xiàn)上百萬上千萬記錄分布存儲的批量查詢設(shè)計模式詳解
  • MySQL 百萬級分頁優(yōu)化(Mysql千萬級快速分頁)
  • mysql千萬級數(shù)據(jù)大表該如何優(yōu)化?
  • Mysql limit 優(yōu)化,百萬至千萬級快速分頁 復(fù)合索引的引用并應(yīng)用于輕量級框架

標簽:珠海 鹽城 沈陽 拉薩 移動 黔東 沈陽 徐州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《MySQL制作具有千萬條測試數(shù)據(jù)的測試庫的方法》,本文關(guān)鍵詞  MySQL,制作,具有,千,萬條,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL制作具有千萬條測試數(shù)據(jù)的測試庫的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL制作具有千萬條測試數(shù)據(jù)的測試庫的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 灵璧县| 金山区| 保定市| 丘北县| 三都| 阿拉善左旗| 太谷县| 土默特右旗| 凤阳县| 徐州市| 环江| 镇安县| 泰宁县| 巴林右旗| 湘潭县| 宁乡县| 贵定县| 论坛| 乐清市| 榕江县| 越西县| 鞍山市| 金平| 炉霍县| 新野县| 鹤壁市| 苏尼特右旗| 双鸭山市| 龙胜| 郧西县| 深水埗区| 曲周县| 吉安县| 宜川县| 财经| 迁西县| 寻甸| 罗江县| 文登市| 延津县| 榆树市|