본문 바로가기
기타

Query Test[Timestamp 유형의 변화에 따른 속도차이 확인]

by 돌맹96 2024. 1. 3.
728x90
반응형

type 1. 데이터 유형이 BIGINT인 경우

type 2. 데이터 유형이 DATETIME인 경우

상황은 다음과 같다.

type 1.의 경우 4개의 키가 존재하는데 각각의 키는 TagId(INT), DateTime(DATETIME), Quality(SMALLINT), Value(BIGINT)

type 2.의 경우 TagId(INT), Timestamp(BIGINT), Quality(SMALLINT), Value(BIGINT)

20만개의 데이터를 50개씩 멀티쿼리를 통해 DB에 들어가는 시간을 파악한다.

각각의 코드는 다음과 같다.

type 1.

// 10만개 50개씩 멀티쿼리로 Timestamp BIGINT 시간 측정
void MySqlTestQuery1()
{
	// Initialize mysql to insert data
	m_pMySql = mysql_init(NULL);
	if (m_pMySql == NULL)
		return;

	// Connect to the mysql server
	if (mysql_real_connect(m_pMySql, "127.0.0.1", "root", "root", "datamon", 3306, NULL, 0) == NULL)
		//if (mysql_real_connect(m_pMySql, "127.0.0.1", "root", "dcgoodman", "DGTC", 3306, NULL, 0) == NULL)
	{
		CStringA str = mysql_error(m_pMySql);

		mysql_close(m_pMySql);
		m_pMySql = NULL;
		return;
	}

	char szStmt[65536];
	int nPos;

	INT64 nTime = 0;

	SYSTEMTIME st;

	::GetSystemTimeAsFileTime((FILETIME*)&nTime);

	printf("Start Insertion\\n");
	
	DWORD dwTick = ::GetTickCount();
	
	for (int i = 0; i < 200000; i += 50)
	{
		nPos = sprintf(szStmt, "INSERT INTO arcint (TagId, Timestamp, Quality, Value) VALUES ");

		for (int j = 0; j < 50; j++)
		{
			nTime += 10000;
			nPos += sprintf(szStmt + nPos, "(100, %I64d, %d, %d),",nTime, 192, j);
		}
		szStmt[nPos - 1] = 0;

		ExecuteUpdate(szStmt);
	}

	DWORD dwTick2 = ::GetTickCount();

	printf("Elapsed Time: %d\\n", dwTick2 - dwTick);
	

}

type 2.

// 10만개 50개씩 멀티쿼리로 DateTime 시간 측정
void MySqlTestQuery2()
{

	// Initialize mysql to insert data
	m_pMySql = mysql_init(NULL);
	if (m_pMySql == NULL)
		return;

	// Connect to the mysql server
	if (mysql_real_connect(m_pMySql, "127.0.0.1", "root", "root", "datamon", 3306, NULL, 0) == NULL)
		//if (mysql_real_connect(m_pMySql, "127.0.0.1", "root", "dcgoodman", "DGTC", 3306, NULL, 0) == NULL)
	{
		CStringA str = mysql_error(m_pMySql);

		mysql_close(m_pMySql);
		m_pMySql = NULL;
		return;
	}

	char szStmt[65536];
	int nPos;

	INT64 nTime = 0;
	SYSTEMTIME st;

	::GetSystemTimeAsFileTime((FILETIME*)&nTime);

	printf("Start Insertion\\n");

	DWORD dwTick = ::GetTickCount();

	for (int i = 0; i < 200000; i += 50) {

		nPos = sprintf(szStmt, "INSERT INTO testint (TagId, DateTime, Quality, Value) VALUES ");

		for (int j = 0; j < 50; j++)
		{
			nTime += 10000;
			::FileTimeToSystemTime((FILETIME*)&nTime, &st);

			nPos += sprintf(szStmt + nPos, "(100, '%04d-%02d-%02d %02d:%02d:%02d.%03d', %d, %d),", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, 192, j);
		}

		szStmt[nPos-1] = 0;

		ExecuteUpdate(szStmt);
	}

	DWORD dwTick2 = ::GetTickCount();

	printf("Elapsed Time: %d\\n", dwTick2 - dwTick);

}

결과는 다음과 같다.

type 1.

type 2.

속도 성능면에서 3배정도 차이나는것을 파악할 수 있다.

 

 

728x90
반응형