欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL生成千萬(wàn)測(cè)試數(shù)據(jù)以及遇到的問(wèn)題

 更新時(shí)間:2022年08月03日 10:43:06   作者:怪?咖@  
前兩天發(fā)現(xiàn)同事要做一個(gè)對(duì)大表進(jìn)行范圍查詢(xún)的功能,所以需要生成千萬(wàn)數(shù)據(jù)進(jìn)行性能測(cè)試,下面這篇文章主要給大家介紹了關(guān)于MySQL生成千萬(wàn)測(cè)試數(shù)據(jù)以及遇到的問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

1、創(chuàng)建基礎(chǔ)表結(jié)構(gòu)

CREATE TABLE `t_user` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `c_user_id` varchar(36) NOT NULL DEFAULT '',
 `c_name` varchar(22) NOT NULL DEFAULT '',
 `c_province_id` int(11) NOT NULL,
 `c_city_id` int(11) NOT NULL,
 `create_time` datetime NOT NULL,
 PRIMARY KEY (`id`),
 KEY `idx_user_id` (`c_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2、創(chuàng)建內(nèi)存表

直接往實(shí)表添加數(shù)據(jù)比較慢,所以我們先插入內(nèi)存表,然后再同步到實(shí)表。

CREATE TABLE `t_user_memory` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `c_user_id` varchar(36) NOT NULL DEFAULT '',
 `c_name` varchar(22) NOT NULL DEFAULT '',
 `c_province_id` int(11) NOT NULL,
 `c_city_id` int(11) NOT NULL,
 `create_time` datetime NOT NULL,
 PRIMARY KEY (`id`),
 KEY `idx_user_id` (`c_user_id`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4;

3、創(chuàng)建存儲(chǔ)過(guò)程和函數(shù)

# 創(chuàng)建隨機(jī)字符串
delimiter $$
CREATE DEFINER = `root` @`%` FUNCTION `randStr` ( n INT ) RETURNS VARCHAR ( 255 ) CHARSET utf8mb4 DETERMINISTIC BEGIN
	DECLARE
		chars_str VARCHAR ( 100 ) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
	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 $$ 
# 創(chuàng)建隨機(jī)時(shí)間的函數(shù),sd和ed兩個(gè)入?yún)⒋砩傻臅r(shí)間是這個(gè)時(shí)間范圍內(nèi)的。sd開(kāi)始時(shí)間,ed截止時(shí)間。	
CREATE DEFINER = `root` @`%` FUNCTION `randDataTime` ( sd DATETIME, ed DATETIME ) RETURNS datetime DETERMINISTIC BEGIN
	DECLARE
		sub INT DEFAULT 0;
	DECLARE
		ret DATETIME;
	
	SET sub = ABS(
	UNIX_TIMESTAMP( ed )- UNIX_TIMESTAMP( sd ));
	
	SET ret = DATE_ADD( sd, INTERVAL FLOOR( 1+RAND ()*( sub - 1 )) SECOND );
	RETURN ret;

END $$ 

# 創(chuàng)建插入數(shù)據(jù)存儲(chǔ)過(guò)程
CREATE DEFINER = `root` @`%` PROCEDURE `add_t_user_memory` ( IN n INT ) BEGIN
	DECLARE
		i INT DEFAULT 1;
	WHILE
			( i <= n ) DO
			INSERT INTO t_user_memory ( c_user_id, c_name, c_province_id, c_city_id, create_time )
		VALUES
			(
				uuid(),
				randStr ( 20 ),
				FLOOR( RAND() * 1000 ),
				FLOOR( RAND() * 100 ),
				randDataTime ( "2020-01-01", "2021-01-01" ));
		

		SET i = i + 1;
		
	END WHILE;

END $$
delimiter ;

4、執(zhí)行存儲(chǔ)過(guò)程

存儲(chǔ)過(guò)程當(dāng)中的數(shù)字就是要生成的數(shù)量,自行填寫(xiě)。

CALL add_t_user_memory(10);

100萬(wàn)大概需要8分鐘!

5、遇到的問(wèn)題

創(chuàng)建存儲(chǔ)過(guò)程和執(zhí)行的時(shí)候可能會(huì)出現(xiàn)以下兩種問(wèn)題:

5.1、1449錯(cuò)誤

在創(chuàng)建存儲(chǔ)過(guò)程的時(shí)候可能會(huì)出現(xiàn)1449:錯(cuò)誤:

mysql 1449 : The user specified as a definer (‘root’@‘%’) does not exist

經(jīng)查詢(xún)是權(quán)限問(wèn)題,解決辦法:

運(yùn)行sql:

grant all privileges on *.* to 'root'@'%' identified by ".";
flush privileges;

5.2、1114錯(cuò)誤

當(dāng)生成數(shù)量大的時(shí)候就可能會(huì)報(bào)這個(gè)錯(cuò)誤:

解決方法:在my.cnf中修改max_heap_table_size = 256M tmp_table_size = 256M,重啟MySQL服務(wù)(my.cnf在mysql安裝路徑),如果還不夠用根據(jù)自己電腦自行修改。如果是線(xiàn)上服務(wù)器,最好不要自行修改,還是跟運(yùn)維多溝通溝通,避免出現(xiàn)問(wèn)題。

show VARIABLES like '%TABLE_size%';

改完可以在這進(jìn)行查看:

6、同步數(shù)據(jù)

INSERT INTO t_user SELECT * FROM t_user_memory;

總結(jié)

到此這篇關(guān)于MySQL生成千萬(wàn)測(cè)試數(shù)據(jù)以及遇到的問(wèn)題的文章就介紹到這了,更多相關(guān)MySQL生成千萬(wàn)測(cè)試數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RedHat6.5安裝MySQL5.7教程詳解

    RedHat6.5安裝MySQL5.7教程詳解

    這篇文章主要為大家詳細(xì)介紹了RedHat6.5下MySQL5.7的安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • MySQL5.7如何修改root密碼

    MySQL5.7如何修改root密碼

    這篇文章主要為大家詳細(xì)介紹了MySQL5.7修改root密碼的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 淺談mysql的子查詢(xún)聯(lián)合與in的效率

    淺談mysql的子查詢(xún)聯(lián)合與in的效率

    本文是作者在實(shí)際產(chǎn)品測(cè)試中遇到的問(wèn)題,繼而作了相關(guān)總結(jié),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • MySQL使用show?effective?grants查看權(quán)限官方解讀

    MySQL使用show?effective?grants查看權(quán)限官方解讀

    這篇文章主要為大家介紹了MySQL使用show?effective?grants查看權(quán)限,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • MySQL數(shù)據(jù)庫(kù)case?when?then?end的詳細(xì)使用方法

    MySQL數(shù)據(jù)庫(kù)case?when?then?end的詳細(xì)使用方法

    在SQL語(yǔ)法中我們首先使用CASE關(guān)鍵字開(kāi)頭,然后根據(jù)不同的條件使用WHEN關(guān)鍵字,并在每個(gè)條件后面指定結(jié)果,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)case?when?then?end的詳細(xì)使用方法,需要的朋友可以參考下
    2023-12-12
  • Navicat for MySQL導(dǎo)出表結(jié)構(gòu)腳本的簡(jiǎn)單方法

    Navicat for MySQL導(dǎo)出表結(jié)構(gòu)腳本的簡(jiǎn)單方法

    下面小編就為大家?guī)?lái)一篇Navicat for MySQL導(dǎo)出表結(jié)構(gòu)腳本的簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • MySQL時(shí)區(qū)差8小時(shí)的多種問(wèn)題解決方法

    MySQL時(shí)區(qū)差8小時(shí)的多種問(wèn)題解決方法

    mybatis將本地的數(shù)據(jù)傳入到mysql數(shù)據(jù)庫(kù)服務(wù)器的時(shí)候,服務(wù)器會(huì)對(duì)數(shù)據(jù)進(jìn)行檢測(cè),會(huì)把date類(lèi)型的數(shù)據(jù)自動(dòng)轉(zhuǎn)換為mysql服務(wù)器所對(duì)應(yīng)的時(shí)區(qū),即0時(shí)區(qū),所以會(huì)相差8小時(shí),本文給大家介紹了MySQL時(shí)區(qū)差8小時(shí)的問(wèn)題解決方法,需要的朋友可以參考下
    2024-01-01
  • MySQL優(yōu)化常用的19種有效方法(推薦!)

    MySQL優(yōu)化常用的19種有效方法(推薦!)

    關(guān)于數(shù)據(jù)庫(kù)優(yōu)化,網(wǎng)上有不少資料和方法,但是不少質(zhì)量參差不齊,有些總結(jié)的不夠到位,內(nèi)容冗雜,下面這篇文章主要給大家介紹了關(guān)于MySQL優(yōu)化常用的19種有效方法,需要的朋友可以參考下
    2022-03-03
  • RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本示例代碼

    RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本示例代碼

    這篇文章主要給大家介紹了關(guān)于RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • MySQL 的啟動(dòng)和連接方式實(shí)例分析

    MySQL 的啟動(dòng)和連接方式實(shí)例分析

    這篇文章主要介紹了MySQL 的啟動(dòng)和連接方式,結(jié)合實(shí)例形式分析了MySQL 啟動(dòng)方式和連接方式相關(guān)分類(lèi)與操作技巧,需要的朋友可以參考下
    2020-05-05

最新評(píng)論