LINUX.ORG.RU

История изменений

Исправление sparks, (текущая версия) :

Из интереса, сделал нечто подобное твоей дб локально и заполнил её рандомными данными, скриптом, всё выполнение занимает несколько минут

import mysql.connector
import random
import string
import uuid
import time

def generate_string(length):
	alphabet = string.ascii_lowercase + string.ascii_uppercase
	return ''.join(random.choice(alphabet) for i in range(length))

def generate_table1_data(mysql_client, amount):
	cursor = mysql_client.cursor()

	add_record_query = "insert into tblMain (name, anothername, testc, uuid, sha2hash) values (%s, %s, %s, %s, sha2(name, 256))"
	
	for i in range(amount):
		new_record = (generate_string(40), generate_string(50), generate_string(10), str(uuid.uuid4()))
		cursor.execute(add_record_query, new_record)
		if (i%(amount/100) == 0):
			mysql_client.commit()

	mysql_client.commit()
	cursor.close()

def generate_table2_data(mysql_client, amount):
	cursor = mysql_client.cursor()

	cursor.execute("select id from tblMain order by rand() limit {size}".format(size=amount))

	id_set = [record[0] for record in cursor.fetchall()]

	add_record_query = "insert into tblSubtable1 (id, subname) values (%s, %s)"

	for i in range(amount):
		new_record = (random.choice(id_set), generate_string(40))
		print(new_record)
		cursor.execute(add_record_query, new_record)
		if (i%(amount/100) == 0):
			mysql_client.commit()

	mysql_client.commit()
	cursor.close()	

def generate_table3_data(mysql_client, amount):
	cursor = mysql_client.cursor()

	cursor.execute("select id from tblMain order by rand() limit {size}".format(size=amount))

	id_set = [record[0] for record in cursor.fetchall()]

	add_record_query = "insert into tblSubuuid (id, subname) values (%s, %s)"

	for i in range(amount):
		new_record = (random.choice(id_set), str(uuid.uuid4()))
		cursor.execute(add_record_query, new_record)
		if (i%(amount/100) == 0):
			mysql_client.commit()

	mysql_client.commit()
	cursor.close()		

try:
	mysql_client = mysql.connector.connect(user='root', password='root', host='localhost', database='perf_test')

	start = time.time()
	print("Filling main table...")
	generate_table1_data(mysql_client, 1000000)
	print("Done, time taken ", time.time() - start)

	start = time.time()
	print("Filling second table...")
	generate_table2_data(mysql_client, 1000000)
	print("Done, time taken ", time.time() - start)

	start = time.time()
	print("Filling third table...")
	generate_table3_data(mysql_client, 1000000)
	print("Done, time taken ", time.time() - start)

	mysql_client.close()
except mysql.connector.Error as e:
	print(e)
finally:
	print("We've done here")


Исходная версия sparks, :

Из интереса, сделал нечто подобное твоей дб локально и заполнил её рандомными данными, скриптом, всё выполнение занимает несколько минут

import mysql.connector
import random
import string
import uuid
import time

def generate_string(length):
	alphabet = string.ascii_lowercase + string.ascii_uppercase
	return ''.join(random.choice(alphabet) for i in range(length))

def generate_table1_data(mysql_client, amount):
	cursor = mysql_client.cursor()

	add_record_query = "insert into tblMain (name, anothername, testc, uuid, sha2hash) values (%s, %s, %s, %s, sha2(name, 256))"
	
	for i in range(amount):
		new_record = (generate_string(40), generate_string(50), generate_string(10), str(uuid.uuid4()))
		cursor.execute(add_record_query, new_record)
		if (i%(amount/100) == 0):
			mysql_client.commit()

	mysql_client.commit()
	cursor.close()

def generate_table2_data(mysql_client, amount):
	cursor = mysql_client.cursor()

	cursor.execute("select id from tblMain order by rand() limit {size}".format(size=amount))

	id_set = [record[0] for record in cursor.fetchall()]

	add_record_query = "insert into tblSubtable1 (id, subname) values (%s, %s)"

	for i in range(amount):
		new_record = (random.choice(id_set), generate_string(40))
		print(new_record)
		cursor.execute(add_record_query, new_record)
		if (i%(amount/100) == 0):
			mysql_client.commit()

	mysql_client.commit()
	cursor.close()	

def generate_table3_data(mysql_client, amount):
	cursor = mysql_client.cursor()

	cursor.execute("select id from tblMain order by rand() limit {size}".format(size=amount))

	id_set = [record[0] for record in cursor.fetchall()]

	add_record_query = "insert into tblSubuuid (id, subname) values (%s, %s)"

	for i in range(amount):
		new_record = (random.choice(id_set), str(uuid.uuid4()))
		cursor.execute(add_record_query, new_record)
		if (i%(amount/100) == 0):
			mysql_client.commit()

	mysql_client.commit()
	cursor.close()		

try:
	mysql_client = mysql.connector.connect(user='root', password='root', host='localhost', database='perf_test')

	start = time.time()
	print("Filling main table...")
	generate_table1_data(mysql_client, 1000000)
	print("Done, time taken ", time.time() - start)

	start = time.time()
	print("Filling second table...")
	generate_table1_data(mysql_client, 1000000)
	print("Done, time taken ", time.time() - start)

	start = time.time()
	print("Filling third table...")
	generate_table1_data(mysql_client, 1000000)
	print("Done, time taken ", time.time() - start)

	mysql_client.close()
except mysql.connector.Error as e:
	print(e)
finally:
	print("We've done here")